2013-03-23 40 views
0

我無法弄清楚如何解決這個問題。我的迭代器構造函數需要是私有的,所以我使用容器來返回一個迭代器,但它拒絕編譯。C++ - 訪問私有的嵌套迭代器

class A { 
    public: 
     class iterator { 
      friend class A; 
      public: 
       virtual ~iterator(); 
       iterator operator++(int); 
       iterator operator--(int); 

      private: 
       iterator(int index, A container); 
     }; 


     iterator begin(); 
     iterator end(); 

}; 

A.cpp

A::iterator A::begin(){ 
    return iterator(0, *this); 
} 

A::iterator A::end(){ 
    return iterator(length(), *this); 
} 

我再這樣稱呼它:

for(A::iterator i = a.begin(); i != a.end(); i++) 
    std::cout << *i; 

但這最後一塊說,「A :: iterator是私人內這個上下文「。我有一種感覺,迭代器構造函數只在begin()之外被調用,但我不知道如何解決它。我對C++相當陌生,所以任何幫助,將不勝感激!

+0

首先 - 構造函數不能是私人的,如果你想在除了你的類方法和函數之外的任何地方使用它。 – Blood 2013-03-23 10:12:44

回答

3

這是因爲iterator類沒有公共構造函數。您應該實現一個公共的複製構造函數(可能還有一個複製賦值操作符(請參閱the rule of three))。

+0

謝謝!愚蠢的我,我已經宣佈拷貝構造函數也是私有的,但它爲什麼不可能是有意義的。 – Supremacy 2013-03-23 10:19:30