提问人:Ilea Cristian 提问时间:6/15/2012 最后编辑:CommunityIlea Cristian 更新时间:6/15/2012 访问量:2184
C++ 模板错误:调用没有匹配的函数
C++ Templates Error: no matching function for call
问:
我收到这里提到的错误:C++模板错误:调用 std::vector<int、std::allocator<int 没有匹配的函数> >
这是错误(再次):
main.cpp: In function ‘int main()’:
main.cpp:21:21: error: no matching function for call to ‘Test<int>::foo(std::vector<int, std::allocator<int> >)’
main.cpp:21:21: note: candidate is:
main.cpp:14:6: note: void Test<T>::foo(std::vector<T>&) [with T = int]
main.cpp:14:6: note: no known conversion for argument 1 from ‘std::vector<int, std::allocator<int> >’ to ‘std::vector<int, std::allocator<int> >&’
问题是我有一个更复杂的情况,我不知道如何解决它(不破坏太多代码)。 我有一个泛型的二叉搜索树类。我想用二叉搜索树节点中的所有值填充 T(generic) 类型的元素向量 - 所以我不能使向量常量。遍历树的函数是递归函数。
所以我有:
/*main*/
BST<int> t;
t.add(21);
t.add(12);
//.... etc.
vector<int> elements;
t.inorder(elements);
/* ------------ */
和:
/*BST.h*/
template<typename T>
class BST{
//....
Node<T>* root;
//....
void inorder_rec(Node<T>* root, vector<T>& result);
void inorder(vector<T>& result);
//....
};
template<typename T>
void BST<T>::inorder_rec(Node<T>* root, vector<T>& result){
// recursive call for the child nodes
}
void BST<T>::inorder(vector<T>& result){
inorder_rec(this->root, result);
}
/* ------------ */
答:
3赞
pmr
6/15/2012
#1
您正在尝试调用一个函数,该函数采用带有临时引用的引用。临时只能绑定到对 const 的引用。此外,明智的做法是显示错误的实际来源。
0赞
Steve M
6/15/2012
#2
这是您的实际代码吗?inorder 和 inorder_rec 的定义需要具有返回类型。否则,这部分代码看起来不错,看不到临时的:
vector<int> elements;
t.inorder(elements);
愚蠢的问题,但你保存了你的文件吗?还是此错误来自代码的不同部分?
评论
0赞
Ilea Cristian
6/15/2012
我编辑了代码(我匆忙写了它 - 这不是实际的代码)。
0赞
Steve M
6/15/2012
@user1458849 错误消息指的是 ,而不是 。您的实际错误消息是什么?Test<T>::foo(vector<T>&)
BST<T>::inorder(vector<T>&)
评论
class
BST
Test<T>::foo(std::vector<T>&)