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

где hfunc — это typedef метода.

У меня есть класс HashFcn, который имеет метод primeHash

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

Это мой первый раз, когда я делаю typdef / метод передачи — любые подсказки или помощь будут с благодарностью!

0

Решение

попробуйте сделать PrimeHash статическим:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]