Bonjours,

Je cherche à implémenter une patron de classe pour une liste simplement chainée ( LSC ).
J'ai d'abord commencé par implémenter une classe LSC permettant de lister des entiers : tout s'est bien passé. Partant de celle-ci j'ai implémenté le partron de classe pour des listes de <class T>. Pour la liste seule, tout va bien...
...Mais dès que j'ajoute la classe imbriquée 'iterator' impossible de comprendre le problème et d'y remédier!

Voici un extrait de mon code :
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
template <class T> class LSC	// Liste Simplement Chainée
{
private:
	struct noeud {
		T* objet;
		noeud* suivant; };
	noeud* debut;		// Pointeur sur le premier noeud
	noeud* fin;			// Pointeur sur le dernier noeud
	unsigned int size;	//Taille de la liste
 
public:
	class iterator
	{
	private:
		noeud* noeudPointe;
		T* objet;
	public:
		iterator ();
		iterator ( noeud*, T* );
 
		iterator& operator = ( iterator& );
		iterator& operator ++ ( int );	// ++ postfixé!
		T operator * ();
 
		bool operator == ( iterator& );
		bool operator != ( iterator& );
	};
	LSC ();		// Constructeur usuel
	~LSC ();	// Destructeur
	// Ne pas oublier de faire 'contructeur de recopie' et 'operator ='...
 
	void push_front ( T );
	void pop_front ();
 
	iterator begin ();
	iterator end ();
 
	template <class T> friend std::ostream& operator << ( std::ostream&, LSC<T>& );
};
et , à la suite dans le même *.h, on a entre autre :
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
template <class T> LSC<T>::iterator::iterator ()
{
	noeudPointe = NULL;
	objet = NULL;
}
 
template <class T> LSC<T>::iterator::iterator ( noeud* pnd, T* pn )
{
	noeudPointe = pnd;
	objet = pn;
}
//********************
 
template <class T> LSC<T>::iterator& LSC<T>::iterator::operator = ( LSC<T>::iterator& it )
{
	if ( this != &it )
	{
		noeudPointe = it.noeudPointe;
		objet = it.objet;
	}
 
	return *this;
}
...
à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
template <class T> LSC<T>::iterator& LSC<T>::iterator::operator = ( LSC<T>::iterator& it )
le compilateur me dit :
d:\visual studio 2010\projects\liste\liste\lsc.h(106) : warning C4346: 'LSC<T>::iterator'*: le nom dépendant n'est pas un type
préfixer avec 'typename' pour indiquer un type
d:\visual studio 2010\projects\liste\liste\lsc.h(106) : error C2143: erreur de syntaxe*: absence de ';' avant '&'
d:\visual studio 2010\projects\liste\liste\lsc.h(106) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
d:\visual studio 2010\projects\liste\liste\lsc.h(106) : fatal error C1903: impossible de récupérer à partir des erreurs précédentes*; arrêt de la compilation
Les constructeurs passent bien, mais comment déclarer correctement mes 'operator' pour que ça passe???

J'ai regadé mais ça ne m'aide pas plus que ça!!