メソッドをコンストラクターに渡していますが、別のクラスのメソッドを使用するとエラーが発生します。
現在、この形式で機能しています。
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はメソッドのtypdefです。
PrimeHashメソッドを持つHashFcnクラスがあります
unsigned int primeHash(const std::string&);
typdef /メソッドの受け渡しを行うのはこれが初めてです-手がかりや助けがあれば大歓迎です!