我自己实现了一个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接口的方式有关。
感谢。
答案 0 :(得分:3)
您无法在参数列表中提取内容(看起来就像您正在尝试的那样)。
更改您的addEntry
功能,使其签名为:
void addEntry(HashEntry<key, value> h)
或
void addEntry(key k, value v)
在我看来,第二个似乎更干净,但如果你真的希望调用者出于某种原因构造HashEntry
,那么第一个也很好。