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 :

Probléme de compilation pour un héritage


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Probléme de compilation pour un héritage
    Salut à tous! Donc voila j'ai ce probléme incompréhensible pour moi, je n'arrive pas à compiler un bout de code pour un simple héritage:

    Voici Macro.h
    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
     
    #ifndef MACRO_H_INCLUDED
    #define MACRO_H_INCLUDED
     
    #include "Executable.h"
    #include "Robot.h"
    #include <string>
    #include <vector>
    #include <map>
    #include <iostream>
     
    class Macro : public Executable{
        private:
            vector<Executable*> contenu;
     
        public :
            Macro(){};
            void executer();
    		void desexecuter();
    		void ajouterExecutable(Executable* e);
    		void supprimerExecutable(Executable* e);
    };
    #endif // MACRO_H_INCLUDED
    et voici Executable.h
    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
     
    #ifndef EXECUTABLE_H
    #define EXECUTABLE_H
     
    #include "Robot.h"
    #include <string>
    #include <vector>
    #include <map>
    #include <iostream>
     
     
    class Executable {
     
    	public:
            Executable(){}
    		virtual void executer(){}
    		virtual void desexecuter(){}
     
     
    };
     
    #endif
    Cela me sort cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    g++ -g -ansi  -Wold-style-cast -Woverloaded-virtual -I -D_DEBUG_ -c Executable.cpp -o Executable.o -g -ansi  -Wold-style-cast -Woverloaded-virtual;
    In file included from Robot.h:20,
                     from Executable.h:14,
                     from Executable.cpp:11:
    Macro.h:11: error: expected class-name before ‘{’ token
    Macro.h:13: error: ‘Executable’ was not declared in this scope
    Macro.h:13: error: template argument 1 is invalid
    Macro.h:13: error: template argument 2 is invalid
    Macro.h:19: error: ‘Executable’ has not been declared
    Macro.h:20: error: ‘Executable’ has not been declared
    make: *** [Executable.o] Erreur 1
    Aussi, si je rajoute avant la déclaration de la classe Macro la ligne de code
    cela me sort cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Macro.h|12|error: invalid use of incomplete type ‘struct Executable’|
    Macro.h|11|error: forward declaration of ‘struct Executable’|
    ||=== Build finished: 2 errors, 0 warnings ===|
    Quelqu'un pourrait-il m'aider à reseoudre ce probléme?

  2. #2
    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
    Bonjour,
    L'exemple que tu montres est trop simplifié et ne reproduit pas l'erreur. Il compile sans problème. Peux-tu poster un bout de code reproduisant l'erreur ?

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    macro.h est inclus par robot.h qui est inclus par executable.h qui est inclus par executable.cpp. Mais macro.h a besoin de connaître le type complet d'Executable. Donc macro.h doit être inclus *après* executable.h, pas avant. donc executable.h ne peut pas inclure un fichier.h qui inclut (directement ou indirectement) macro.h.

    Comme, je ne vois pas pourquoi macro.h ou executable.h ont besoin d'inclure robot.h, il faut supprimer cet include pour régler ton problème.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/03/2010, 16h32
  2. Réponses: 11
    Dernier message: 11/05/2009, 21h29
  3. Problème de compilation pour une DLL
    Par Faith's Fall dans le forum C++Builder
    Réponses: 8
    Dernier message: 24/03/2008, 16h40
  4. [UBUNTU] Problème de compilation pour installer le logiciel irssi
    Par Creature_Funebre dans le forum Ubuntu
    Réponses: 4
    Dernier message: 29/04/2007, 19h09

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