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 :

POO - association des classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut POO - association des classes
    Bonjour,

    Je suis débutante en programmation. Je suis en train d'apprendre à coder l'association entre deux classes mais il y a un message d'erreur "Personnage' has not been declared" et "'Personnage' does not name a type" qui apparaissent dans toutes mes tentatives et que je ne sais comment rectifier. L'IDE utilisé est code::blocks 17.12.

    Voici les fichiers "Personnage.h" et "Arme"

    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
    #ifndef ARME_H_INCLUDED
     
    #define ARME_H_INCLUDED
     
    #include "Personnage.h"
     
    class Arme
     
    {
     
    public:
     
        Arme();
     
        Arme(m_arme, std::string m_nomArme);
     
        void afficherArme();
     
        void attributionAPersonnage (Personnage *a); // pour attribuer l'arme a un personnage
     
    private:
     
       int m_arme;
     
        std::string m_nonArme;
     
        Personnage *cePersonnage;
     
    };
     
    #endif // ARME_H_INCLUDED
    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
    #ifndef PERSONNAGE_H_INCLUDED
     
    #define PERSONNAGE_H_INCLUDED
     
    #include "Arme.h"
     
    class Personnage
     
    {
     
    public:
     
        Personnage();
     
        Personnage (m_mana, m_nbreDegats);
     
        void afficherPersonnage();
     
        void initArmeDePersonnage (Arme *b);
     
    private:
     
        int m_mana;
     
        int m_nbreDegats:
     
        Arme **uneArme;
     
        vector <Arme*> tabArmeDePersonnage;
     
    };
     
    #endif // PERSONNAGE_H_INCLUDED
    voici les messages d'erreur:

    -------------- Build: Debug in open_class_room (compiler: GNU GCC Compiler)-------
    
    mingw32-g++.exe -Wall -fexceptions -g  -c C:\Users\HP\Desktop\CNED\open_class_room\Personnage.cpp -o obj\Debug\Personnage.o
    mingw32-g++.exe  -o bin\Debug\open_class_room.exe obj\Debug\Arme.o obj\Debug\main.o obj\Debug\Personnage.o   
    In file included from C:\Users\HP\Desktop\CNED\open_class_room\Personnage.h:4:0,
                     from C:\Users\HP\Desktop\CNED\open_class_room\Personnage.cpp:1:
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:11:16: error: expected ')' before ',' token
         Arme(m_arme, std::string m_nomArme);
                    ^
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:13:34: error: 'Personnage' has not been declared
         void attributionAPersonnage (Personnage *a); // pour attribuer l'arme a un personnage
                                      ^
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:16:10: error: 'string' in namespace 'std' does not name a type
         std::string m_nonArme;
              ^
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:17:5: error: 'Personnage' does not name a type
         Personnage *cePersonnage;
         ^
    In file included from C:\Users\HP\Desktop\CNED\open_class_room\Personnage.cpp:1:0:
    C:\Users\HP\Desktop\CNED\open_class_room\Personnage.h:10:23: error: expected ')' before ',' token
         Personnage (m_mana, m_nbreDegats);
                           ^
    C:\Users\HP\Desktop\CNED\open_class_room\Personnage.h:17:10: error: expected primary-expression before '*' token
         Arme *CetArme;
              ^
    C:\Users\HP\Desktop\CNED\open_class_room\Personnage.h:17:11: error: 'CetArme' was not declared in this scope
         Arme *CetArme;
    Merci d'avance

  2. #2
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Hello!

    Ahaha ca fait plaisir de retrouver le bon vieux tutoriel Arme/Perso par lequel j'avais commencé la programmation C++ il y a ... 5 ans!

    Petit tip: tu peux formater ton code dans ton message en utilisant la balise de code dans la barre d'outil (le dièse # juste à droite du bouton citation). Ca sera plus facile à lire!

    Concernant ton code, tu as plusieurs problèmes!

    Ton message d'erreur, ligne par ligne te dit ce qu'il ne va pas. Il faut apprendre à comprendre la façon un peu déstabilisante qu'a le compilateur de t'expliquer tes erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:11:16: error: expected ')' before ',' token
    Arme(m_arme, std::string m_nomArme);
    Bon là c'est facile, la signature de ton constructeur est super bizarre! Arme(m_arme, std::string m_nomArme); Ca devrait être plutôt quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Arme(int arme, std::string nom);
    Dans l'implémentation du constructeur tu pourrais alors associer les valeurs transmise comme arguments aux membres de la classes via une liste d'initialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Arme(int arme, std::string nom): m_arme(arme), m_nomArme(nom)  {}
    D'ailleurs tu feras attention, la déclaration de ton membre est mal orthographié !

    La seconde erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:13:34: error: 'Personnage' has not been declared
    void attributionAPersonnage (Personnage *a); // pour attribuer l'arme a un personnage
    C'est un peu classique quand on commence (j'avais eu le même problème). En gros le header de Personnage inclue Arme, et le header de Arme inclue Personnage. C'est ce qui s'appelle une dépendance cyclique, qu'il faut que tu casses.
    Tu mets donc une déclaration un peu dans le vent pour rassurer le compilateur:

    fichier Personnage.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef ARME_H_INCLUDED
    #define ARME_H_INCLUDED
     
    class Personnage; // ça remplace ton include et pète la dépendance
     
    class Arme
    { 
       ... // ton implémentation
    }
    Ca devrait régler quelques soucis. Si ça le règle pas, alors je me suis planté et les autres devs du forum corrigeront de toute façon bien vite mon erreur

    Une autre erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    In file included from C:\Users\HP\Desktop\CNED\open_class_room\Personnage.cpp:1:0:
    C:\Users\HP\Desktop\CNED\open_class_room\Personnage.h:10:23: error: expected ')' before ',' token
    Personnage (m_mana, m_nbreDegats);
    Moui bah là c'est pareil, pourquoi mets-tu directement les membres dans la signature du contructeur? Voir ci dessus, c'est la même chose!

    Un autre erreur est assez facile à régler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\Users\HP\Desktop\CNED\open_class_room\Arme.h:16:10: error: 'string' in namespace 'std' does not name a type
    std::string m_nonArme;
    Tu as oublié la directive #include <string> qui te permet d'utiliser la classe string !

    Sur une autre note, le tutoriel d'où provient ce cours m'a été personnellement super utile pour commencer (j'adorais les blagues et le style très informel et décontracté du site), mais il ne fait pas l'unanimité, et il y a quelques bonnes raisons! Donc si je peux te donner un conseil, c'est de continuer avec ce tuto mais en gardant un oeil sur les tutos disponible ici, qui sont bien plus précis, bien plus à jour, mais plus difficile d'accès au débutant aussi!

    Bon courage dans tes progrès!

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    Bonjour, merci beaucoup ça marché cette fois. Je crois bien qu'il faudrait que je sois moins distraite
    merci aussi pour le tip

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

Discussions similaires

  1. [POO] Héritage des classes
    Par mic79 dans le forum Langage
    Réponses: 27
    Dernier message: 09/03/2007, 20h02
  2. [POO] Organisation des classes PHP
    Par AsQuel dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2007, 09h09
  3. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 08h28
  4. [POO] faire des classes en php
    Par gromit83 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 16h10
  5. approche objet en python...associer des classes.
    Par preacher_man dans le forum Général Python
    Réponses: 9
    Dernier message: 06/01/2006, 15h21

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