2013-03-23 3 views
0

이 문제를 해결하는 방법을 알아낼 수 없습니다. 내 반복자 생성자는 private이어야하므로 컨테이너를 사용하여 반복자를 반환하지만 컴파일을 거부합니다.C++ - 개인 중첩 반복기에 액세스

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

을하지만 마지막 블록은 :: 반복자가 내 개인이다 "라고 말한다 :

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); 
} 

나는 다음과 같이 호출 이 문맥 ". iterator 생성자가 begin() 밖에서 만 호출된다는 느낌이 들지만 해결 방법을 모른다. 나는 C++에 상당히 익숙하다. 그래서 어떤 도움을 주시면 감사하겠습니다!

+0

우선 클래스 생성자는 클래스 메서드 및 함수 외에 다른 곳에서 사용하고 싶다면 private 일 수 없습니다. – Blood

답변

3

iterator 클래스에는 public 생성자가 없기 때문입니다. 공개 복사 생성자 (copy-constructor)를 구현해야합니다 (복사 할당 연산자 (the rule of three 참조)).

+0

감사! 어리석은 나, 나는 복사 생성자를 비공개로 선언했지만, 왜 그렇게 될 수 없는지 이해할 수있다. – Supremacy