C++ 没有用于调用的匹配函数

C++ 没有用于调用的匹配函数,c++,C++,我一直遇到这个错误,我不知道如何修复它: 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

我一直遇到这个错误,我不知道如何修复它:

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>*&)'
btree.tem:98:从“std::pair btree::insert(const T&)[with T=char]实例化”
test.cpp:13:从此处实例化
btree.tem:37:错误:调用“btree::addElem(std::_List\u iterator&,node*&)”时没有匹配的函数
h:178:注:候选项为:void btree::addElem(std::_List_iterator&,node&)[带T=char]
btree.tem:98:从“std::pair btree::insert(const T&)[with T=char]实例化”
test.cpp:13:从此处实例化
btree.tem:48:错误:调用“btree::addElem(std::_List\u iterator&,node*&)”时没有匹配的函数
在头文件中,我有一个setter函数:

void addElem (std::_List_iterator<node<T>*>& itr, node <T>& n) {
  neighbours.insert(itr, n); 
}
void addElem(标准::_List_iterator&itr,node&n){
插入(itr,n);
}
我不知道这有什么问题。每当我这样称呼它时,错误似乎就会发生:

class list < node<T>* >::iterator itr = bt->level().begin();
node <T>*n = new node<T>(elem, bt->max());
bt->addElem(itr, n);
类列表::迭代器itr=bt->level().begin();
node*n=新节点(elem,bt->max());
bt->addElem(itr,n);

问题出在哪里?

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]
btree.tem:37:错误:没有用于调用的匹配函数
'btree::addElem(标准::_List_iterator&,node*&)'
B树h:178:注:候选人为:
void btree::addElem(std::_List_iterator&,node&)[带T=char]

请参阅错误中的第二个参数类型以及建议的候选参数。

编译器正在查找:

btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&)
btree::addElem(std:_List_iterator&,node*&)
但它只发现了一些东西:

btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>&)
btree::addElem(标准::_List_iterator&,node&)
您正在向函数传递指针。您尚未定义将指针作为其最后一个参数的
addElem

错误不是“从…开始安装”-这是描述导致错误的模板实例化的上下文

错误是

btree.tem:37: error: no matching function for call to 
'btree<char>::addElem(std::_List_iterator<node<char>*>&, node<char>*&)'
btree.tem:37:错误:没有用于调用的匹配函数
'btree::addElem(标准::_List_iterator&,node*&)'
候选人名单如下:

note: candidates are: 
void btree<T>::addElem(std::_List_iterator<node<T>*>&, node<T>&) 
[with T = char]
注:候选人包括:
void btree::addElem(标准::_List_iterator&,node&)
[带T=char]

因此,它期望的是一个
节点
,而不是一个指针
节点*

使您的生活更轻松,并使用typedefs。你会因为这样做而更加爱自己。除此之外,请检查您的代码。你得到了一个类型不匹配的地方。查看函数执行了什么,以及函数调用返回了什么。它们一致吗?例如,std::vector与std::vector的类型不同。为什么要使用
std::\u List\u迭代器?这是一个内部实现细节。@K-ballo我正在尝试,因为我不确定如何将迭代器传递到
addElem
函数
list
iterator
node*
将是
list::iterator
。如果我的答案不能帮助您解决问题,您不应该接受它。你明白了吗?是的,我明白了,谢谢!这是列表迭代器的输入错误