2012-11-06 113 views
0

我將一個方法傳遞給構造函數,但是當我使用另一個類的方法時,它給了我一個錯誤。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(HashFunction hashFunction) 
    : hfunc(hashFunction) 

其中hfunc是一種方法的類型定義。

我有一個類HashFcn它有方法primeHash

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

這是我第一次做typdef /法傳球 - 任何線索或幫助將不勝感激!

回答

1

嘗試使primeHash靜:

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

作品!是因爲&HashFcn :: primeHash引用類的方法而不是對象的?此外,而不是使方法靜態,有沒有辦法通過HashMap的參數來放置一個對象的方法? –

+0

@RichardLee:我想象你的HashFunction是一個常規函數,而不是一個方法。靜態成員函數的作用類似於常規函數,但非靜態成員函數是不同的,因爲它需要「this」的值。 –

+0

@RichardLee:如果您使用的是C++ 11,則可以使用std :: function來處理綁定成員函數或常規函數。 –

相關問題