2011-10-17 222 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>*&)' 

裏面我的頭文件我有這樣的setter函數:

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

讓你的生活更輕鬆一點,並使用typedefs。你會更喜歡這樣做。除此之外,請檢查您的代碼。某處出現類型不匹配的情況。看看函數需要什麼,並看看你的函數調用返回。它們是一致的嗎?例如,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] 

看到錯誤的第二個參數類型,以及在建議的候選人中。

0

該錯誤不是「從...安裝」 - 這是描述哪些模板實例導致錯誤的上下文。

的錯誤是

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