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()の代わりにを返します。ただし、メンバーもconstであるため、割り当てることはできません。const_iteratoriteratorIter_

通常、特別な必要がない限り、イテレータをメンバー変数として宣言する必要はありません。代わりに、必要なときにローカルのものを宣言し、適切な恒常性を宣言してください。

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 に答える