Classe imbriquée - Iterateur
Bonjour à toutes et à tous,
Je suis entrain de coder une structure de données "Liste" comprenant des "Maillon". Afin de parcourir celle-ci plus facilement, je souhaite ajouter une classe imbriquée "Iterateur" cependant je rencontre quelques difficultés.
Code allégée de la classe "Liste" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| template<class T> class Liste
{
friend class Maillon<T>;
private:
Maillon<T> *_tete, *_dernier;
public:
Liste();
Liste(const Liste<T>& l);
Liste<T>& operator=(const Liste<T>& l);
~Liste();
Liste<T>& put_back(const Maillon<T>& m);
Liste<T>& put_back(const T& val);
Liste<T>& put_back(const Liste<T>& l);
void flushMaillon();
bool isEmpty() const;
void toString() const;
// Déclaration de la classe interne Iterateur
class Iterateur
{
private:
Maillon<T> *m;
public:
Iterateur():m(NULL {}
Iterateur(const Maillon<T>& value): m(value) {}
bool operator!=(const Iterateur& it)
{
return (m != it.m);
}
Iterateur& operator++()
{
m = m->suivant;
return *this;
}
};
Iterateur begin()
{
return Iterateur(_tete);
}
Iterateur end()
{
return Iterateur();
}
}; |
Code allégée de la classe "Maillon" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| template<class T> class Maillon
{
friend class Liste<T>;
private:
T _data;
Maillon<T> *_suivant;
public:
Maillon();
Maillon(const Maillon<T>& m);
Maillon(const T& value);
~Maillon();
Maillon<T>& operator=(const Maillon& m);
}; |
J'obtiens des erreurs via la ligne suivante (présente dans mon main) :
Code:
Liste<int>::Iterateur it(l3.begin());
Les erreurs sont les suivantes :
Code:
1 2 3 4 5
| erreur: invalid user-defined conversion from Maillon<int>* to const Maillon<int>& [-fpermissive]
erreur: invalid conversion from Maillon<int>* to const int& [-fpermissive]
erreur: initializing argument 1 of Maillon<T>::Maillon(const T&) [with T = int] [-fpermissive] |
Je suis un peu bloqué car je ne vois pas à quel niveau ça bloque, je "comprends" le problème mais suit dans l'incapacité de le résoudre. J'ai regardé des classes imbriquées similaires mais cela ne m'a aidé en rien ..
Merci d'avance.