나는 목록 클래스의 멤버 클래스로 반복자 클래스를 만들려고 해요, 그리고 간접 연산자 (*)가 가리키는 대상리스트에 액세스 할 과부하하는 것을 시도하고있다 :간접 작업자에게 과부하를주는 방법은 무엇입니까? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
을 lstptr
은 목록에 대한 포인터이고 current
은 노드 클래스에 대한 포인터이고 노드 클래스는 T
데이터 멤버 data
을 포함합니다.
반복자는 다음과 같이 선언한다 :
list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)
오류 : 잘 오버로드 연산자의 함수 정의 *을 컴파일하지만, 할 수 있어요
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
내가 좋아하는 뭔가를하려고 할 때 내가 말하길 < 1> 불법 간접 참조를 사용하고있다. < 2> list :: iterator를 int로 변환 할 수 없다. 두 오류 모두 14 번 라인에서 발생합니다.
아무도 내가 잘못하고있는 것을 알고 있고 간접 작업자를 올바르게 오버로드 할 수 있습니까?
NB : 더 많은 코드를 볼 필요가 있다면, 전체 코드를 여기에 올리고 싶지 않기 때문에 어떤 부분을 말해 주어야합니다. 왜냐하면이 코드는 205 행이고, 그 중 204 행은 그렇지 않기 때문입니다. 어떤 오류가 있습니다.
" :: iterator IT; 목록을 입력 하시겠습니까?" - "목록 :: iterator IT"이어야합니다. 맞습니까? –
leander
@leander : 예, 해당 목록 실제 코드에서, 나는 단지 내 예제에서 그것을 입력 엉망. –