Bonsoir,

J'ai le problème suivant. Je veux faire une classe template avec un iterateur globale :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
template <class C> class Toto
{
private:
  map<int, C *> titi;
  map<int, C *>::iterator titiIte;
};
J'instancie cette classe Template avec une classe dérivée concrète (mettons class Tutu : public Toto<string> par exemple) et j'obtiens le message suivant du compilateur :

... toto.h(32) : warning C4346: 'std::map<int,_Kty*>::iterator' : le nom dépendant n'est pas un type préfixer avec 'typename' pour indiquer un type ... toto.h(75) : voir la référence à l'instanciation du modèle de classe 'Toto<C>' en cours de compilation

...toto.h(32) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'titiIte'
...toto.h(32) : error C2501: 'Toto<C>::titiIte' : Spécificateurs de type ou de classe de stockage manquants

streamer - 2 erreur(s), 1 avertissement(s)
J'ai résolu le problème en écrivant ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
map<int, void *>::iterator titiIte;
Mais je ne comprends pas bien le mecanisme et je ne suis pas sur que ce soit la solution la plus propre. Pouvez-vous m'expliquer ?

Merci