看板 C_and_CPP 關於我們 聯絡資訊
建議把code用置底文的貼code網站貼出來。 如果有一些是不能公開的,至少要把編譯訊息有提到的東西,簡單的整理出一段code。 因為一些看起來好像不重要的東西,可能才是問題所在~"~。 ※ 引述《david50407 (David07)》之銘言: : 開發平台(Platform): C++ : 額外使用到的函數庫(Library Used): null : 問題(Question):遇到<unresolved overloaded function type> : 餵入的資料(Input):null : 預期的正確結果(Expected Output):compile 成功 : 錯誤結果(Wrong Output): : Sources/CUserData.cpp: In constructor ‘UnknowBBS::UserData::UserData()’: : Sources/CUserData.cpp:11: error: no matching function for call to ‘ : UnknowBBS::StringComparer<void (*)(FILE*, int)>::add(const char [3], : <unresolved overloaded function type>)’ : ./Sources/./Tools/StringComparer.h:23: note: candidates are: : UnknowBBS::StringComparer<R> UnknowBBS::StringComparer<R>::add(char*, R) : [with R = void (*)(FILE*, int)] : 程式碼(Code): : typedef void (*UDdelegate)(FILE *, int); : StringComparer<UDdelegate> sc; : sc.add("id", UserData::read_id); UserData::read_id是什麼? 如果是non-static member function的話,會有一個隱含的參數:this 所以不能當一般的函數指標用。 之所以會是<unresolved overloaded function type>, 可能是你有很多不同的版本,例如const、non-const, 而compiler目前沒辦法幫你決定。 你可以先強制轉型,讓compiler知道你要的是什麼,"可能"可以看到進一步的錯誤訊息: sc.add("id", static_cast<UDdelegate>(UserData::read_id)); : void UserData::read_id(FILE *f, int length) {} 下面那個template <typename R>,是class的template還是函數的template? 照編譯訊息看起來是class的template。 你這種寫法是函數的template,如果是class的template的話要: template <typename R> StringComparer<R> StringComparer<R>::add(string key, R val) : template <typename R> : StringComparer StringComparer::add(string key, R val) : { : keys.push_back(key); : vals.push_back(val); : return this; : } 回傳的型態是StringComparer,你卻回傳this(型態是StringComparer*)。 : /* : std::vector<string> keys; : std::vector<R> vals; : */ : 補充說明(Supplement): : 額... 編譯錯誤 : 我丟的是函數指標 : 但是給了我一個 : <unresolved overloaded function type> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.192