迭代器在C ++中的对列表中?

时间:2013-02-26 16:56:23

标签: c++ list static compiler-errors iterator

我定义了一个对列表,并希望在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> >}')

1 个答案:

答案 0 :(得分:2)

我的猜测是你试图写一个const成员函数,而不是你在问题中复制的内容:

void function() const
{
    Iter_ = l_edge_.begin();
}

现在,由于函数为constl_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();
    }
};