c++ - 模板构造函数没有匹配的函数调用错误

标签 c++ templates

这是类声明的摘录:

template<typename key_type,typename value_type>
class _IndexTupleTree_Iterator
{
public:

    typedef typename std::vector<value_type>::iterator value_it_t;
    _IndexTupleTree_Iterator(std::vector<GenNode<key_type,value_type>*>& node_stack,std::vector<int>& key_pos_stack,value_it_t value_pos);
 ...
 }

我尝试在下面的上下文(最后一行)中调用上面的构造函数:

template<typename key_type,typename value_type>
class LeafNode : public GenNode<key_type,value_type>
{
public:
    typedef std::pair< std::vector<key_type>,value_type > entry_t;
    LeafNode(const entry_t entry);
    void insert(const entry_t entry);
    _IndexTupleTree_Iterator<key_type,value_type> begin(std::vector<GenNode<key_type,value_type>*>& node_stack,std::vector<int>& key_pos_stack) const;
    bool operator==(const LeafNode<key_type,value_type>& rhs) const;
    //bool find(std::vector<key_type> key, _IndexTupleTree_Iterator& pos);
private:
    std::vector<value_type> _values;
};

 template<typename key_type,typename value_type>
_IndexTupleTree_Iterator<key_type,value_type> LeafNode<key_type,value_type>::begin(std::vector<GenNode<key_type,value_type>*>& node_stack,std::vector<int>& key_pos_stack) const
{
    key_pos_stack.push_back(0);
    return _IndexTupleTree_Iterator<key_type,value_type>(node_stack,key_pos_stack, _values.begin());
}

但是我收到以下错误:

../src/tensor_utils/IndexTupleTree.h:134: error: no matching function for call to ‘_IndexTupleTree_Iterator<int, int>::_IndexTupleTree_Iterator(std::vector<GenNode<int, int>*, std::allocator<GenNode<int, int>*> >&, std::vector<int, std::allocator<int> >&, __gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >)’
../src/tensor_utils/IndexTupleTree.h:55: note: candidates are: _IndexTupleTree_Iterator<key_type, value_type>::_IndexTupleTree_Iterator(std::vector<GenNode<key_type, value_type>*, std::allocator<GenNode<key_type, value_type>*> >&, std::vector<int, std::allocator<int> >&, typename std::vector<value_type, std::allocator<_T2> >::iterator) [with key_type = int, value_type = int]

我知道问题出在最后一个参数上。有谁知道为什么它找不到构造函数并调用它?

最佳答案

Does anyone know why it can't find the constructor and call it?

那是因为您的 begin() 函数是 const 限定的,这意味着执行 _values.begin() 将返回一个const_iterator.

但是,_IndexTupleTree_Iterator 的构造函数接受一个非const iterator 作为最后一个参数。这就是编译器无法解析调用的原因。

关于c++ - 模板构造函数没有匹配的函数调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126596/

相关文章:

c++ - 模板参数排列顺序错误。这是对的吗?

c++ - 实例化模板时无法访问在类错误中声明的私有(private)成员

c++ - 无法在赋值中将 char(*)[50] 转换为 char*

c++ - Google C++ 风格指南中提到的对象所有者是什么?

c++ - 错误 : invalid operands to binary % (have 'double' and 'double' )

c++ - 是否可以从任意迭代器(C++)中获取值类型?

c++ - 作为参数传递时字符串文字的存储类型

c++ - 填充红黑树的最有效方法是什么?

c++ - 如何禁用某些模板类型的类成员函数

c++ - 函数模板显式实例化 extern