IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Template - vector - iterator


Sujet :

Langage C++

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut Template - vector - iterator
    Bonjour,
    je suis en train de compiler le code suivant:

    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
    #include <vector>
     
    template <class T>
    class ListModule
    {
        public:
            ListModule();
            ~ListModule();
     
        protected:
     
        private:
            vector<T>   _List;
            vector<T>::iterator _It;  // << l'erreur est ici
    };
    et je recupere le message d'erreur a la compilation:
    Error : expected ';' before "_It"

    Le domaine std est bien resolu (la declaration du vecteur 'vector<T> _List;' compile correctement).

    Le compilateur que j'utilise est mingw sous IDE CodeBlocks.

    Quelqu'un aurait-il une idee?

    Merci.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ajoute typename devant la déclaration. Pour plus d'infos, c'est expliqué dans la FAQ.

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Nickel! Ca fonctionne, super.

    J'aurais jamais trouvé... Comme quoi, il reste encore une bonne part de 'non determinisme' en progra!! On a beau lire des bouquins...

    Je vais m'attaquer a tes tutos avec plaisir.

    Merci beaucoups.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    N'oublie pas de cliquer sur

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Il y a juste une remarque que tu as faite et qui me chagrine...

    Il s'agit de
    Citation Envoyé par jmeuf
    Le domaine std est bien resolu
    Heuu... est-ce à dire que tu as une directive qui traine, quelque part, dans un de tes fichiers d'entetes

    (comme tu présente une déclaration de classe, je crains fortement que ce fut le cas )

    Si c'est le cas, sache que c'est une pratique généralement peu recommandable que de mettre la directive dans le fichier d'entete...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Je suis d'accord avec toi et ai de suite corrige. C'est 'plus parlant' de laisser apparent l'operateur de resolution (sauf peut-etre pour les cout/endl repetes ... ).

    Merci encore pour ton support.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par jmeuf
    Je suis d'accord avec toi et ai de suite corrige. C'est 'plus parlant' de laisser apparent l'operateur de resolution (sauf peut-etre pour les cout/endl repetes ... ).

    Merci encore pour ton support.
    A vrai dire, ce n'est pas uniquement parce que c'est plus parlant...

    C'est surtout parce que, bien que je ne remette pas en cause l'utilité des directives using, il s'agit de nouveau d'une possibilité qui doit etre utilisée avec "parcimonie", ou, en tous cas, dans une portée restreinte...

    Or, il se fait que, sauf erreur, son emploi dan un fichier d'entete va provoquer le fait qu'elle sera active dans tous les fichiers qui incluent, fusse indirectement, le fichier d'entete dans lequel elle se trouve...

    Alors, bien que l'exemple soit peut etre excessif...

    Imaginons simplement que je crées une bibliotheque qui utilise des classes nommées string, vector ou autres classes tellement connues dans la STL, qui n'ont rien à voir avec les classes de la STL...

    Si je choisis ces noms, c'est tout simplement parce que cela correspond à l'usage fait, et, comme j'ai pris la peine de mettre toutes ces classes dans un espace de nommage particulier (p.e: malib), je suis normalement assuré qu'elles n'entrent pas en conflit avec celles de la STL...

    Seulement, voilà... toi, en tant qu'utilisateur de ma bibliotheque, tu l'utilise en parallele avec la STL, et c'est ton plus stricte droit...

    Et du coup, dans un fichier d'entete dans lequel tu as besoin des std::string, tu inclue le fichier <string> et tu utilise la directive using namespace std;

    Dans un autre fichier d'entete dans lequel tu a besoin de ma classe string, tu inclu l'entete correspondant, et tu utilise la directive using namespace malib;...

    Et quand tu vas regrouper les deux fichiers d'entetes, ca va coincer...

    Simplement parce que quand tu va simplement déclarer string str, il y aura conflit: quelle classe doit etre utilisée: std::string ou malib::string

    Et le conflit apparaitra, sauf erreur, systématiquement dans tous les fichiers qui regrouperont les deux fichiers d'entete...

    C'est la raison pour laquelle il est très largement conseillé d'utiliser les directives using dans une portée aussi restreinte que possible, et, en tout état de cause, au maximum dans une unité de compilation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/12/2007, 02h19
  2. Template et iterator
    Par bleast8 dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2006, 19h59
  3. Erreur Gcc, template et iterator
    Par aidos dans le forum Langage
    Réponses: 7
    Dernier message: 14/03/2006, 09h04
  4. Template et iterator.
    Par tibtib17 dans le forum Langage
    Réponses: 5
    Dernier message: 29/07/2005, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo