nested class dans un class template
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:ccool:...
...:calim2:Mais dès que j'ajoute la classe imbriquée 'iterator' impossible de comprendre le problème et d'y remédier:cry:!
Voici un extrait de mon code :
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
| 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:
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:
template <class T> LSC<T>::iterator& LSC<T>::iterator::operator = ( LSC<T>::iterator& it )
le compilateur me dit :
Citation:
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é là mais ça ne m'aide pas plus que ça!!