我定义了一个对列表,并希望在an example之后使用迭代器访问它们。
class A{
private:
list<pair<size_type,size_type> > l_edge_;
public:
void function() const{
list<pair<size_type,size_type> >::iterator Iter_;
Iter_ = l_edge_.begin();
}
}
但是,我收到了编译错误。我该如何解决?
error: no match for 'operator=' (operand types are 'const iterator
{aka const std::_List_iterator<std::pair<unsigned int, unsigned int> >}' and
'std::list<std::pair<unsigned int, unsigned int> >::const_iterator
{aka std::_List_const_iterator<std::pair<unsigned int, unsigned int> >}')
答案 0 :(得分:2)
我的猜测是你试图写一个const成员函数,而不是你在问题中复制的内容:
void function() const
{
Iter_ = l_edge_.begin();
}
现在,由于函数为const
,l_edge_
成员也是常量,因此begin()
返回const_iterator
而不是普通iterator
。但这几乎不重要,因为Iter_
成员也是const,因此无法将其分配给。
通常您不希望将迭代器声明为成员变量,除非非常特殊。相反,只需在需要时声明一个本地的,以及相应的 constness :
class A
{
private:
list<pair<size_type,size_type> > l_edge_;
public:
//const member function
void function() const
{
list< pair<size_type,size_type> >::const_iterator iter = l_edge_.begin();
}
//non-const member function
void function()
{
list< pair<size_type,size_type> >::iterator iter = l_edge_.begin();
}
};