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 :
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
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>& ); };
à la ligne
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; } ...le compilateur me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part template <class T> LSC<T>::iterator& LSC<T>::iterator::operator = ( LSC<T>::iterator& it )Les constructeurs passent bien, mais comment déclarer correctement mes 'operator' pour que ça passe???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
J'ai regadé là mais ça ne m'aide pas plus que ça!!
Partager