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

C++ Discussion :

Erreur de compilation


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 136
    Points : 71
    Points
    71
    Par défaut Erreur de compilation
    Bonjour!

    Alors voilà simplement le problème et le code:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    ///dans liste_rappel_evenement.hpp
     
    class Base_rappel_ev
    {
        public:
        Base_rappel_ev();
        virtual ~Base_rappel_ev();
     
        virtual void ajouter_ev(Evenement* ev) = 0;
     
    };
     
    template <class T> class Liste_rappel_evenement : public Base_rappel_ev
    {
        public:
        Liste_rappel_evenement(Type_evenement t);
        ~Liste_rappel_evenement();
     
        void ajouter_ev(Evenement* ev);
        void ajouter_rappel(Rappel_evenement<T>* r);
     
        protected:
     
        private:
        Type_evenement le_type;
        std::list<Rappel_evenement<T>*> la_liste;
    };
     
    template <class T> void Liste_rappel_evenement<T>::ajouter_ev(Evenement* ev)
    {
        ///ligne de l'erreur
        std::list<Rappel_evenement<T>*>::iterator it;
        it = la_liste.begin();
        for( it ; it != la_liste.end() ; it++)
        {
            (*it)->rappel(dynamic_cast<T*>(ev));
        }
    }
     
    /** BUILD MESSAGES
    D:\Programmation\projects\Projet 0\programmation\Projet 0\liste_rappel_evenement.hpp||In member function `void Liste_rappel_evenement<T>::ajouter_ev(Evenement*)':|
    D:\Programmation\projects\Projet 0\programmation\Projet 0\liste_rappel_evenement.hpp|64|error: expected `;' before "it"|
    D:\Programmation\projects\Projet 0\programmation\Projet 0\liste_rappel_evenement.hpp|65|error: `it' was not declared in this scope|
    ||=== Build finished: 2 errors, 0 warnings ===|
    */
    J'utilise Code::blocks et mingw sous windows vista.
    Je pense que c'est un simple soucis de syntaxe... mais je ne comprends pas pourquoi.

    Merci de votre aide

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Salut!

    Je ne vois aucune déclaration/définition de Rappel_evenement ...
    C'est certainement ça qui manque. Ou bien std::list -- #include <list> ?

    Quand tu as ce type d'erreur, c'est souvent qu'il y manque la définition d'un symbole avant le symbolé indiqué par l'érreur.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 136
    Points : 71
    Points
    71
    Par défaut
    Pourtant le code apparait dans cet ordre dans le fichier et il ne pose pas problème pour la déclaration de la liste dans la classe.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    J'ai compilé ton code pour tester. J'ai du ajouter plusieurs déclarations (Rappel_evenement, Evenement et Type_evenement) pour que le code compile. Comme tu n'as pas des erreurs de type non défini ("error: ‘Type_evenement’ does not name a type"), je suppose que tu les as correctement déclaré. Ca aurait été bien de le préciser (comme tu l'as vu, le premier réflexe est de penser à un problème d'include).

    Sinon, pour ton problème, cela provient du fait que le compilateur ne sait pas que tu essaies de déclarer un type : ne connaissant pas T, le compilateur ne sait pas que std::list<Rappel_evenement<T>*> est également un type. Il suffit juste d'ajouter typename devant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typename std::list<Rappel_evenement<T>*> it;
    Bon courage

    PS: avec des typedef, le code est souvent plus joli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef std::list<Rappel_evenement<T>*> TList;
    typedef typename TList::iterator TListIterator;

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Sinon, pour ton problème, cela provient du fait que le compilateur ne sait pas que tu essaies de déclarer un type : ne connaissant pas T, le compilateur ne sait pas que std::list<Rappel_evenement<T>*> est également un type. Il suffit juste d'ajouter typename devant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typename std::list<Rappel_evenement<T>*> it;
    En fait, il sait que std::list<Rappel_evenement<T>*> est un type, c'est std::list<Rappel_evenement<T>*>::iterator qu'il ne sait pas que c'est un type. C'est une erreur quand on utilise dans un template (classe ou fonction), un type défini dans une autre classe générique s'appuyant sur un des paramètres génériques de la fonction ou la classe.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    template<class T>
    struct identity
    {
        typedef T type;
    };
     
    void fonction()
    {
        identity<double>::type d; // ok
    }
    template<class T>
    void fonction_2()
    {
        identity<double>::type d; // ok
        identity<T>::type d2; // erreur
        typename identity<T>::type d2; // ok
    }
     
    int main()
    {
        fonction();
        fonction_2<double>();
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 136
    Points : 71
    Points
    71
    Par défaut
    Compilation silencieuse
    Merci!

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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