C ++模板错误:呼叫没有匹配功能(C++ Templates Error: no matching

2019-09-18 03:33发布

我来到这里提到的错误: C ++模板错误:没有匹配呼叫的std ::向量函数<整型,性病::分配器<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(通用)的元素的载体 - 所以我不能让矢量常量。 横穿树的功能是递归的。

所以我有:

/*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);
}
/* ------------ */

Answer 1:

您正在试图调用一个函数,它有一个临时的参考。 临时可以仅结合到常量的引用。 此外,这将是明智的展示,其中的错误实际上起源。



Answer 2:

这是您的实际代码? 序和inorder_rec需求的定义有返回类型。 否则,这部分代码看起来很好,看不到临时:

vector<int> elements;
t.inorder(elements);

愚蠢的问题,但你保存文件? 或从代码的不同部分来这个错误?



文章来源: C++ Templates Error: no matching function for call