0

我定义了一个对列表,并希望使用迭代器访问它们,遵循一个示例

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> >}')
4

1 回答 1

2

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

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

现在,由于函数是const,因此l_edge_成员也是 const,因此begin()返回 aconst_iterator而不是 plain 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();
    }
};
于 2013-02-26T17:08:06.603 回答