2017-11-11 2 views
0
내가 List 안에 내 내부 클래스 ListIterator의의 ctor을 만드는 데 문제가 있어요

을, 나도 몰라 :C++ 내부 클래스의 ctor 및 매개 변수

template<class T, int length> 
class List { 
public: 
    typedef struct Row { 
     T data; 
     int prev; 
     int next; 
    } Row; 

    class ListIterator { 
     typedef ListIterator iterator; 
     public: 
      ListIterator(int mPos, Row mRow) : pos(mPos) , row(mRow){} 
      //methods 
     private: 
      int pos; 
      Row row; 
    }; 

    typedef ListIterator iterator; 

    iterator begin() const; 
private: 
    Row storage[length]; 
    int startDataIdx = 0; 
}; 

template<class T, int length> 
typename List<T,length>::iterator 
List<T, length>::begin() const{ 
    iterator item_iterator(startDataIdx, storage[startDataIdx]); 
    return(item_iterator); 
} 

일치하는 기능 에 전화 '목록 :: 반복자 :: 반복자 (const를 CONST, & INT 행 &)'

나는 ListIterator<T>를 만들 같은 T 0으로을 매개 변수로 사용합니다 (이는 분명히 List이 포함 된 것과 동일한 유형의 요소를 반복하므로), 어떻게해야합니까? begin() 메서드에서 new을 사용하는 것이 더 좋을까요, 아니면 그대로 두어도 좋을까요 (새로운 이점을 사용하지 마십시오).

+0

모든 표준 라이브러리 컨테이너에는'iterator'와'const_iterator' 내부 클래스가 있습니다. 왜 그렇게 생각합니까? –

+0

그래서'list '에서 한 행에 대한 참조를 가진'iterator'를 만들 수 없다고 말하고 있습니까? – binaryBigInt

답변

1
ListIterator(int &mPos, Row* mRow) : pos(mPos) , row(mRow){} 

반복자 생성자 첫번째 매개 변수는 가변 int에 대한 참조이다.

List<T, length>::begin() const{ 
    iterator item_iterator(startDataIdx, ... 

const 클래스 메서드로 이터레이터를 구성하고 있습니다. this은 여기에 const입니다. startDataIdx은 실제로 여기 const이며 이해할 수 있겠지만 const 개체에 대한 참조가 아닌 const 참조를 만들 수는 없습니다.

이터레이터에 대한 매개 변수에 대한 참조를 사용하면이 경우 전혀 유용하지 않습니다. 참조를 제거하고 간단한 int을 전달하십시오.

+0

좋아요, 지금 작업 코드로 내 질문을 편집했습니다. 감사합니다. 다른 질문을 수정하는 방법에 대한 아이디어가 있습니까? – binaryBigInt

+0

네,하지만'Row * mRow'는 똑같은 문제가있어서'*'를 없앨 수는 없습니다. –

+0

이유는 무엇이며 어떻게 수정합니까? – binaryBigInt

관련 문제