Я передаю метод в конструктор, но когда я использовал метод другого класса, он выдает ошибку.
В настоящее время он работает в этой форме;
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 / метод передачи — любые подсказки или помощь будут с благодарностью!
попробуйте сделать PrimeHash статическим:
static unsigned int primeHash(const std::string&);
Других решений пока нет …