2013-02-23 5 views
0

나는 다음과 같은 오류가 자신을 해시 테이블을 구현 발견 해요 :C++ 템플릿 클래스 컴파일 오류

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> >] 

한눈에, 나는 그것이 잘못 아무것도 찾을 could't. 내가 addEntry 인터페이스를 정의하는 방식과 관련이 있다고 생각한다.

감사합니다.

+3

void addEntry (key k, value v)'로'void addEntry (HashEntry (key k, value v))'를 변경 하시겠습니까? – ildjarn

+0

ildjarn thanks! – Figo

답변

3

매개 변수 목록에서 물건을 추출 할 수 없습니다 (사용자가하려는 것처럼 보입니다). 그 서명이 하나가되도록

addEntry 기능을 변경

:

void addEntry(HashEntry<key, value> h) 

또는

void addEntry(key k, value v) 

두 번째는 내 의견으로는 청소기 것 같다,하지만 당신이 정말로 원하는 경우 호출자가 HashEntry를 구성하는 웬일인지, 첫번째 것은 멋지다.

+0

방금 ​​addEntry void (HashEntry h) 시도하고 작동합니다. 한 번 언급 한 이유는 내가 처음에 그런 식으로 넣었던 이유는 모르겠다. ( – Figo

+0

물론, HashEntry 클래스는 코드 클리너를 만들고 쌍을 더 쉽게 움직일 수있는 것 외에도 필수적이지 않다. – Figo

+0

글쎄, 두 가지 옵션 쌍을 구성 할 사람이 근본적으로 다르다는 것은 결정할 문제입니다. – us2012