Je suis en train de créer une classe iterator comme classe membre pour une classe de liste, et essaie de surcharger l'opérateur indirection (*) pour accéder à la liste, il pointe vers:Comment surcharger l'opérateur d'indirection? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
où lstptr
est un pointeur vers une liste, current
est un pointeur vers une classe de noeud, et la classe de noeud contient l'élément de données de type data
de T
.
Iterator est déclarée comme ceci:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
Je suis en mesure de compiler la définition de la fonction de l'opérateur surchargé * bien, mais lorsque je tente de faire quelque chose comme:
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)
L'erreur Je reçois dit < 1> que j'utilise une indirection illégale, et < 2> qu'il ne peut pas convertir de list :: iterator en int. Les deux erreurs se produisent sur la ligne quatorze.
Quelqu'un sait-il ce que je fais mal et comment je peux surcharger correctement l'opérateur indirection? NB: Si vous avez besoin de voir plus de code, dites-moi quelle partie, parce que je ne veux pas mettre tout le code ici parce que ce n'est pas 205 lignes, et 204 de ces lignes ne le font pas (je pense) avoir des erreurs.
Vouliez-vous saisir "liste :: iterator IT;" - il devrait être "liste :: ITerator IT;", non? –
leander
@leander: oui, sa liste dans le code actuel, j'ai juste foiré en tapant dans mon exemple. –