C ++模板类编译错误

时间:2013-02-23 00:32:29

标签: c++ compiler-errors hashtable

我自己实现了一个HashTable,发现了以下错误:

 19 template <class key, class value>
 20 class HashEntry { ... }

 60 template <class key, class value>
 61 class HashTable
 62 {
 63 
 64 private:
 65     size_t _tableSize;
 66     HashEntry<key, value>** _table;
 67 
 68 public:
 69 
 70     HashTable(size_t s)
 71     {
 72         _tableSize = s;
 73         _table = (HashEntry<key, value>**) smalloc(s * sizeof(HashTable<key, value>*));
 74     }
 75 
 76     void addEntry(HashEntry<key, value>(key k, value v))  <---
 77     {
 78 
 79     }
 80 
 ...
 91 };

 93 int main ()
 94 {
 95     HashTable<int, string> t(100);
 96     t.addEntry(HashEntry<int, string>(1, string("a")));    <---

HASH_chaining.cc:96: error: no matching function for call to ‘HashTable<int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::addEntry(HashEntry<int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)’
HASH_chaining.cc:76: note: candidates are: void HashTable<key, value>::addEntry(HashEntry<key, value> (*)(key, value)) [with key = int, value = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]

乍一看,我发现它没有任何问题。我认为这与我定义addEntry接口的方式有关。

感谢。

1 个答案:

答案 0 :(得分:3)

您无法在参数列表中提取内容(看起来就像您正在尝试的那样)。

更改您的addEntry功能,使其签名为:

void addEntry(HashEntry<key, value> h)

void addEntry(key k, value v)

在我看来,第二个似乎更干净,但如果你真的希望调用者出于某种原因构造HashEntry,那么第一个也很好。