Próbuję utworzyć klasę iterator jako członek klasy do klasy listy i staram się przeciążać operatora zadnie (*), aby uzyskać dostęp do listy to wskazując na:Jak przeciążyć operator indeksu? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
gdzie lstptr
jest wskaźnikiem do listy, current
jest wskaźnikiem do klasy węzła, a klasa węzła zawiera element danych data
typu T
.
Iterator jest zadeklarowana następująco:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
jestem w stanie skompilować definicja funkcji przeciążonego operatora * w porządku, ale gdy próbuję zrobić coś takiego:
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)
błędu Otrzymuję komunikat: < 1> że używam niedozwolonego niedozwolenia, a < 2> że nie może konwertować z listy :: iterator na int. Oba błędy występują w linii czternastej.
Czy ktoś wie, co robię źle i jak mogę poprawnie przeciążać operatora indeksu?
NB: Jeśli potrzebujesz więcej kodu, powiedz mi, która część, ponieważ nie chcę wstawić tutaj całego kodu, ponieważ jest to 205 linii, a 204 z tych linii nie (myślę) Mam jakiekolwiek błędy.
Czy chcesz wpisać "list :: iterator IT;" - powinno być "lista :: iterator IT;", prawda? –
leander
@leander: tak, jego lista w rzeczywistym kodzie, właśnie pomieszałem wpisanie tego w moim przykładzie. –