0
我將一個方法傳遞給構造函數,但是當我使用另一個類的方法時,它給了我一個錯誤。C++將std :: function從另一個類傳遞給構造函數
它目前以這種形式工作;
unsigned int pHash(const std::string& str)
{
//method
}
int main()
{
//stuff
HashMap* hm2 = new HashMap(pHash);
//stuff
}
但是,如果我引用另一個頭文件的方法,像這樣;
HashMap* hm2 = new HashMap(&HashFcn::primeHash);
我在運行時收到錯誤消息;
Error 1 error C2100: illegal indirection c:\program files (x86)\microsoft visual studio 11.0\vc\include\xrefwrap 273 1 Project
Error 2 error C2440: 'newline' : cannot convert from 'const std::string *' to 'const HashFcn *' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xrefwrap 273 1 Project
Error 3 error C2647: '.*' : cannot dereference a 'unsigned int (__thiscall HashFcn::*)(const std::string &)' on a 'const std::string' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xrefwrap 273 1 Project
我的散列表構造函數看起來像這樣;
HashMap::HashMap(HashFunction hashFunction)
: hfunc(hashFunction)
其中hfunc是一種方法的類型定義。
我有一個類HashFcn它有方法primeHash
unsigned int primeHash(const std::string&);
這是我第一次做typdef /法傳球 - 任何線索或幫助將不勝感激!
作品!是因爲&HashFcn :: primeHash引用類的方法而不是對象的?此外,而不是使方法靜態,有沒有辦法通過HashMap的參數來放置一個對象的方法? –
@RichardLee:我想象你的HashFunction是一個常規函數,而不是一個方法。靜態成員函數的作用類似於常規函數,但非靜態成員函數是不同的,因爲它需要「this」的值。 –
@RichardLee:如果您使用的是C++ 11,則可以使用std :: function來處理綁定成員函數或常規函數。 –