0

メソッドをコンストラクターに渡していますが、別のクラスのメソッドを使用するとエラーが発生します。

現在、この形式で機能しています。

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メソッドを持つHas​​hFcnクラスがあります

unsigned int primeHash(const std::string&);

typdef /メソッドの受け渡しを行うのはこれが初めてです-手がかりや助けがあれば大歓迎です!

4

1 に答える 1

1

primeHashを静的にしてみてください:

  static unsigned int primeHash(const std::string&);
于 2012-11-06T04:59:54.727 に答える