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!!








...
Mais dès que j'ajoute la classe imbriquée 'iterator' impossible de comprendre le problème et d'y remédier
Répondre avec citation
Partager