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 :

classe de base non définie


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut classe de base non définie
    Bonjour,
    En compilant sous visual C++ express edition 2010, je me retrouve avec plein d'erreur de compilation : 'Objet' : classe de base non définie

    Brève explication de mon programme et ensuite je vous donnerais le début de code :

    J'ai voulu continuer créer un petit rpg en console, pour cela j'ai créer une classe Personnage qui comprends tout ce qui est propre a un personnage, comme la vie, la mana, son arme et son armure ( puisqu'elles sont sur lui, et plus dans l'inventaire vu qu'ils sont équiper )

    Une classe Objet qui est hérité par une classe Arme et une classe Armure

    Une classe Inventaire, qui comprends tous les objets non équiper transporté par le personnage

    Je vous transmet le projet complet
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Si tu veux que ta classe Arme hérite de Objet, il faut inclure Objet.h dans Arme.h

    Les prochaines fois que tu as un problème, essaye de faire un code minimal reproduisant ton problème plutôt que de passer le projet en entier.

    Sur de très gros projet, le parcourir entièrement pour voir où sont les fautes est assez long. Faire un code minimal permet de trouver l'erreur plus rapidement et peux même te permettre de résoudre ton problème juste en écrivant ce code minimal.

    Sinon essaye de faire des copié-collé des messages du compilateur ce qui nous permet de voir directement les lignes où il y a un problème.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse, et je ferais attention a suivre tes conseils par la suite.

    Néanmoins, inclure Objet.h dans Arme.h ainsi que Armure.h ne résout absolument pas le problème...

    Voici les erreurs :

    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\armure.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'convertirObjetVersArme'
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): warning C4183: 'convertirObjetVersArme'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut
    1> Personnage.cpp
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\armure.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'convertirObjetVersArme'
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): warning C4183: 'convertirObjetVersArme'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut
    1> Objet.cpp
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\arme.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\armure.h(8): error C2504: 'Objet'*: classe de base non définie
    1> Inventaire.cpp
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\arme.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\armure.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\inventaire.cpp(92): error C2065: 'm_armeEquiper'*: identificateur non déclaré
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\inventaire.cpp(97): error C2065: 'm_armureEquiper'*: identificateur non déclaré
    1> Armure.cpp
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\arme.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(25): error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'convertirObjetVersArmure'
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(25): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(25): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(25): warning C4183: 'convertirObjetVersArmure'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut
    1> Arme.cpp
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\armure.h(8): error C2504: 'Objet'*: classe de base non définie
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'convertirObjetVersArme'
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\alexandre\desktop\programmation\c++\rpg\rpg\objet.h(24): warning C4183: 'convertirObjetVersArme'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Objet.h et Arme.h s'incluent mutuellement : solution. Idem pour Armure.h.
    Note que tes méthodes convertirObjetVersArme(Objet objet) et convertirObjetVersArmure(Objet objet) traduisent un défaut de conception. Si Arme et Armure héritent de Objet, alors ce sont des Objets, et les méthodes de Objet leur sont accessibles sans passer par un cast.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Je suis désolé mais, je n'arrive pas a comprendre ce que nous faisons via le lien que tu viens de me donner, j'ai essayer mais ca ne fonctionne pas :/

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ha ca y est, c'est bon le problème est résolu, en revanche, je ne comprends toujours pas exactement ce que je viens de faire, en suivant la FAQ

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Tu as une classe Poule qui pond un Oeuf.
    Tu as un Oeuf qui a un pointeur sur sa mère.

    Or tu ne peux pas déclarer Poule avant d'avoir déclarer Oeuf.
    Et tu ne peux pas déclarer un Oeuf avant d'avoir déclarer une Poule.

    On a donc la solution à se problème, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Poule;
     
    class Oeuf
    {
     
     
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Poule
    {
     
     
    }
    Lors de la compilation, il y aura un linkage externe donc les deux class Poule seront considérées comme étant la même par le compilateur.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    okay !

    J'ai compris la, l'inclusion cyclique revient a dire que c'est comme... une boucle infinie qui inclus un headeur, dans ce header y l'inclusion vers le header précédent qui réinclu le headeur précédent etc...
    C'est cela ?

    En déclarant qu'il y a notre classe dépendante de celle ou l'on est, on évite cette boucle d'inclusion ?!

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par Andrelan Voir le message
    okay !

    J'ai compris la, l'inclusion cyclique revient a dire que c'est comme... une boucle infinie qui inclus un headeur, dans ce header y l'inclusion vers le header précédent qui réinclu le headeur précédent etc...
    C'est cela ?

    En déclarant qu'il y a notre classe dépendante de celle ou l'on est, on évite cette boucle d'inclusion ?!
    Tu as tout compris, bravo !!!
    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. 'CWinAppEx' : classe de base non définie
    Par moooona dans le forum MFC
    Réponses: 2
    Dernier message: 01/10/2010, 11h02
  2. Réponses: 3
    Dernier message: 29/10/2008, 14h16
  3. Réponses: 8
    Dernier message: 20/07/2007, 14h28
  4. [probleme] classe de base non définie
    Par aswat dans le forum C++
    Réponses: 14
    Dernier message: 23/02/2007, 20h42
  5. Réponses: 2
    Dernier message: 04/05/2006, 23h36

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