繁体   English   中英

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

[英]No Matching Function Call Error for Template Constructor

以下是类声明的摘录:

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]

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

有谁知道它为什么找不到构造函数并调用它?

那是因为你的begin()函数是const -qualified,这意味着执行_values.begin()会返回一个const_iterator

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM