Ich versuche, eine Iterator-Klasse als Mitglied-Klasse für eine Liste Klasse zu erstellen, und ich versuche, die Indirektionsoperator zu überlasten (*), um die Liste zuzugreifen es zeigt auf:Wie überladen Sie den Indirektionsoperator? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
Dabei ist lstptr
ein Zeiger auf eine Liste, current
ist ein Zeiger auf eine Knotenklasse und die Knotenklasse enthält das Datenelement data
vom Typ T
.
Iterator wird wie folgt erklärt:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
Ich bin in der Lage, die Funktion Definition des überladenen Operators * in Ordnung, zu kompilieren, aber wenn ich versuche, wie etwas zu tun:
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)
Der Fehler Ich bekomme sagt < 1>, dass ich eine illegale Umleitung, und < 2>, dass es nicht von list :: iterator zu int konvertieren kann. Beide Fehler treten in Zeile 14 auf.
Weiß jemand, was ich falsch mache und wie ich den Indirektionsoperator richtig überladen kann?
NB: Wenn Sie mehr Code sehen wollen, sagen Sie mir, welcher Teil, weil ich nicht den ganzen Code hier hochlegen möchte, weil es 205 Zeilen und 204 dieser Zeilen nicht (glaube ich) habe irgendwelche Fehler.
Meinen Sie "Typ list :: Iterator IT;" - Es sollte sein "Liste :: Iterator IT", oder? –
leander
@leander: ja, seine Liste im eigentlichen Code, habe ich gerade versäumt, es in meinem Beispiel zu tippen. –