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::HashMap(HashFunction hashFunction)
    : hfunc(hashFunction)

其中 hfunc 是方法的 typdef。

我有一个类 HashFcn 它有方法 primeHash

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 回答