Template class List C++

Résolu
SuperSim987 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
SuperSim987 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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.

A voir également:

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   18
 
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   Statut Contributeur Dernière intervention   1 299
 
ou
tamplate <typename T>
class List
{
 public:
  class Iterator{...}
   Iterator& Iterator::operator++(void){..}
...
}
0
SuperSim987 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
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