建議把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