Template class List C++

Résolu/Fermé
SuperSim987 Messages postés 2 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 11 octobre 2010 - Modifié par SuperSim987 le 11/10/2010 à 06:21
SuperSim987 Messages postés 2 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 11 octobre 2010 - 11 oct. 2010 à 18:21
Bonjour,

J'essaie de créer une classe List en template fonctionnant avec des itérateurs afin de pratiquer mon C++.
J'obtiens l'erreur suivante lorsque je compile (ex.: List<int>) :

List.hpp:193: error: expected constructor, destructor, or type conversion before '&' token

Pour le code suivant :

template <typename Type>
List<Type>::Iterator& List<Type>::Iterator::operator++(void)
{
...
}

Pourtant, la classe Iterator est belle et bien définie dans le même fichier .hpp (puisqu'il s'agit d'un template) de la façon suivante :

template <typename Type>
class List
{
public:
class Iterator
{
public:
Iterator& operator++(void);
............

Ma question est : quelle est mon erreur ? Visiblement le compilateur n'arrive pas à reconnaître la classe Iterator pour l'objet que je souhaite retourner de l'opérateur++. Aucun namespace n'est utilisé.

Merci pour votre aide.

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 oct. 2010 à 08:04
Salut.
Selon le compilateur utilisé, on peut ou non déclarer une classe au sein d'une autre classe.
Je ne suis pas sur que déclarer une classe dans une autre classe soit "propre".
Sinon, l'erreur fait plutôt pensé au fait qu'il ne peut pas créer l'objet que tu demandes.
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
11 oct. 2010 à 09:55
bonjour,

essayes de définir l'opérateur à l'intérieur de la classe
iterator& operator++(void){.....}
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 oct. 2010 à 10:10
ou
tamplate <typename T>
class List
{
 public:
  class Iterator{...}
   Iterator& Iterator::operator++(void){..}
...
}
0
SuperSim987 Messages postés 2 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 11 octobre 2010
11 oct. 2010 à 18:21
Bonjour et merci pour vos réponses,

Définir l'opérateur à l'intérieur de la classe corrige l'erreur, mais j'aimerais quand même pouvoir le définir dans une autre section du fichier (question de propreté).

L'erreur ne survient que lorsque le type retourné est un Iterator. En guise d'exemple, la fonction suivante compile sans anicroche :
template <typename Type>
Type& List<Type>::Iterator::operator*(void) const
{
...
}

Merci
0