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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
Liste<int>::Iterateur it(l3.begin());
Les erreurs sont les suivantes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.