2010-12-01 105 views
2

我目前在C++中遇到類模板問題。我目前正在製作一個哈希表。C++ - 從類模板調用方法

我正在使用一個仿函數作爲類模板來爲每個表的實例指定我的哈希函數。

IE:一個表的鍵值爲整數,其值爲字符串。另一個可能給它的鍵的值等字符串和整數...

class HashString 
{ 
    public: 
     unsigned long operator()(std::string& key, const unsigned int tableSize) 
     { 
      // ..... 
     } 

}; 

template<typename keyType, typename valueType, class HashFunctor> 
class HashTable 
{ 
    public: 
     // .... 

    private: 

     HashFunctor myHash; 

}; 

現在,讓我們說,我想打電話給所謂的「myHash」哈希一個關鍵的方法,我會首先通過調用它這樣做:

myHash(key, table.size()) 

但gcc沒有找到HashFuntor(字符串,無符號整數)的函數重載例如。

有人能告訴我怎麼打電話給myHash嗎? (注:我不想改變我的仿函數的結構)

編輯:這是錯誤信息,我從我的實際解決方案

instantiated from ‘void tp3::Table<TypeClef, TypeDonnee, FoncHachage>::insert(const TypeClef&, const TypeDonnee&) [with TypeClef = int, TypeDonnee = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FoncHachage = tp3::HacheString]’ 

no match for call to ‘(tp3::HacheString) (tp3::Table<int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, tp3::HacheString>::HashEntry&)’ 

編輯得到:它到處說HacheString其實Ha​​shString(我已經翻譯了我的代碼來粘貼它)。

+0

你能發佈實際的錯誤和相應的代碼嗎? – 2010-12-01 00:20:35

+0

@Alex我上傳了一條錯誤消息。他們都提到同樣的事情(因爲我有我的電話) – Pacane 2010-12-01 00:24:37

回答

2

HashString中的operator()是私有的,可能不是const正確的。它應該是一個以const std :: string &作爲第一個參數的const成員函數。第二個參數不需要是const。

你似乎用HashEntry作爲第二個參數來調用它。什麼是HashEntry?它需要一個unsigned int!

這可能已經解決了您的一些問題。

我假設你的HacheString/HashString差異只是一個錯字。