2013-02-26 34 views
0

我定義了一個對列表,並希望使用迭代器訪問它們,遵循an example迭代器在C++中的對列表中?

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

首先,你可能不希望在你的函數重新申報'l_edge_',因爲這將影響班級成員。 – 2013-02-26 17:00:40

+0

你的編譯器是什麼? [似乎工作](http://liveworkspace.org/code/1s3lcB$4)在GCC 4.7.2。這是你的真實代碼嗎?你不是在調用'cbegin()'嗎? – 2013-02-26 17:00:42

+0

我正在使用gcc48。我發現如果我在函數內部放置列表和迭代器聲明,那就沒有錯誤。如果我將列表聲明作爲類的私有成員,那麼無論迭代器在哪裏聲明,都會出現錯誤。 – Pippi 2013-02-26 17:07:07

回答

2

我的猜測是,你試圖寫一個const成員函數,而不是你的問題複製:現在

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

,因爲該函數是const,該l_edge_成員也const,等等,begin()返回一個const_iterator而不是一個普通的iterator。但這並不重要,因爲Iter_成員也是const的,所以它不能被分配給。

通常你不想聲明迭代器作爲成員變量,除非特別需要。相反,只是聲明當你需要它的本地一個,和適當的常量性的:

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(); 
    } 
}; 
+0

你是對的!謝謝! – Pippi 2013-02-26 17:10:29