2011-10-17 6 views
0

に該当する機能:コール

btree.tem:98: instantiated from 'std::pair<typename btree<T>::iterator, bool> btree<T>::insert(const T&) [with T = char]' 
test.cpp:13: instantiated from here 
btree.tem:37: error: no matching function for call to 'btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&)' 
btree.h:178: note: candidates are: void btree<T>::addElem(std::_List_iterator<node<T>*>&, node<T>&) [with T = char] 
btree.tem:98: instantiated from 'std::pair<typename btree<T>::iterator, bool> btree<T>::insert(const T&) [with T = char]' 
test.cpp:13: instantiated from here 
btree.tem:48: error: no matching function for call to 'btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&)' 

私のヘッダファイルの中に、私はこのセッター機能を持っている:

void addElem (std::_List_iterator<node<T>*>& itr, node <T>& n) { 
    neighbours.insert(itr, n); 
} 

と私は何が間違っているのか分からない。エラーは次のように呼び出すと発生します。

class list < node<T>* >::iterator itr = bt->level().begin(); 
node <T>*n = new node<T>(elem, bt->max()); 
bt->addElem(itr, n); 

問題:あなたがこれを書くために持っているので、

+1

あなたの人生を少し楽にし、typedefを使用してください。あなたはこれを行うためにもっと自分を愛するでしょう。それを超えて、あなたのコードを調べてください。あなたはどこかでタイプの不一致が起こっています。関数が何を取るかを見て、あなたの関数呼び出しが何を返すかを見てください。彼らは合同ですか?たとえば、std :: vector はstd :: vector と同じ型ではありません。 –

+2

なぜ 'std :: _ List_iterator'を使用していますか?これは内部実装の詳細です。 –

+0

@ K-balloイテレータを 'addElem'関数に渡す方法がわからないので試してみました – SNpn

答えて

1

コンパイラが探している:

btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&) 

でものためにそれだけで何かを見つけた:あなたは、あなたの関数へのポインタを渡している

btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>&) 

。あなたは最後の引数としてポインタを取るaddElemを定義していません。

+0

ポインタを追加してもエラーが発生する – SNpn

+1

私の答えが問題を解決するのに役立たなかったら、それを受け入れるべきではありません。あなたはそれを把握しましたか? – Mat

+0

ええ、私はそれを考え出した、ありがとう!リストイテレータとタイプミスがありました – SNpn

0

nは、ポインタです:

bt->addElem(itr, *n); 

それはエラーメッセージから明らかである:

btree.tem:37: error: no matching function for call to 
'btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&)' 

btree.h:178: note: candidates are: 
void btree<T>::addElem(std::_List_iterator<node<T>*>&, node<T>&) [with T = char] 

は、エラーの2番目のパラメータの種類を参照してください、だけでなく、提案された候補者の中で。

0

エラーは "instatiated from ..."ではありません。これは、どのテンプレートインスタンシエーションがエラーにつながるかを説明するコンテキストです。

エラーが

btree.tem:37: error: no matching function for call to 
'btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&)' 

され、候補がリストされます。

note: candidates are: 
void btree<T>::addElem(std::_List_iterator<node<T>*>&, node<T>&) 
[with T = char] 

だからポインタnode<char>*node<char>がない期待しています。