Partage
  • Partager sur Facebook
  • Partager sur Twitter

POO problème de classes

Undefined reference to

Sujet résolu
    4 mai 2008 à 20:56:52

    Salut les Zéros ! :)
    Voilà, j'ai commencé les cours de C++ et j'en suis au chapitre sur les classes (2/2)

    J'ai tout simplement voulu faire mes propres essais par moi même en créant une simple classe Personnage mais j'ai une erreur à la compilation:
    Undefined reference to 'Personnage::Personnage()'

    Je précise que l'erreur se situe à la ligne d'appel de 'Personnage matthieu;'


    Je vous donnes mes codes en espérant que vous puissiez trouver ce que je n'ai pas su voir :(

    - main.c
    #include <iostream>
    #include <string>
    #include "Personnage.h"
    
    using namespace std;
    
    int main()
    {
    
        cout << "Un combat fait rage:" << endl << endl;
    
        // Creation du personnage
        Personnage matthieu;               // L'erreur de compilation est à cette ligne !
    
        return 0;
    }
    


    - Personnage.h
    #ifndef PERSONNAGE
    #define PERSONNAGE
    
    class Personnage
    {
        public:
    
        Personnage();  // Constructeur de personnage
    
        // Les méthodes de la classe Personnage
        void attaquer(Personnage &cible);
        void recevoirDegats(int nombreDeDegats);
        void afficherEtat();
    
        private:
    
        // Les attributs de la classe Personnage
        int m_vie;
        int m_degatArme;
    };
    
    
    #endif // PERSONNAGE
    


    - Personnage.c
    #include <iostream>
    #include <string>
    #include "Personnage.h"
    
    using namespace std;
    
    
    // Appel du constructeur pour l'initialisation des attributs
    Personnage::Personnage() : m_vie(150), m_degatArme(12)
    {
    }
    
    
    // Fonction attaquer
    void Personnage::attaquer(Personnage &cible)
    {
        cible.recevoirDegats(m_degatArme);  // On inflige à la cible la puissance de dommage de l'arme
    }
    
    
    // Fonction recevoir des dégats
    void Personnage::recevoirDegats(int nombreDeDegats)
    {
        m_vie -= nombreDeDegats;
    
        if(m_vie < 0)
        m_vie = 0;
    }
    
    
    // Fonction afficher etat
    void Personnage::afficherEtat()
    {
        cout << "Points de vie: " << m_vie << endl;
    }
    


    Voilà, j'ai personnellement repassé ce code à la loupe et je ne trouve pas la solution :(
    Merci d'avance d'avoir pris le temps de lire mon problème, en espérant que vous trouviez une solution. :)
    • Partager sur Facebook
    • Partager sur Twitter
      4 mai 2008 à 21:09:07

      ( c'est une erreur de link, tu es sûr de compiler Personnage.cpp ? )

      en C++ c'est .cpp et pas .c (d'ailleurs c'est du à ca que tu as ton erreur)
      • Partager sur Facebook
      • Partager sur Twitter
        4 mai 2008 à 21:21:07

        J'ai toujours la même erreur :(
        J'ai pourtant changé tous mes .c en .cpp :euh:

        Edit: je suis allé dans les propriétés des fichiers Personnage.cpp et .h et j'ai coché la case Link et Compile
        • Partager sur Facebook
        • Partager sur Twitter
          4 mai 2008 à 21:22:30

          Citation : Chlab_lak

          c'est une erreur de link, tu es sûr de compiler Personnage.cpp ?


          et ca ?

          edit: essaye de refaire un projet
          • Partager sur Facebook
          • Partager sur Twitter
            4 mai 2008 à 21:25:53

            -------------- Build: Release in testeur ---------------
            
            Compiling: main.cpp
            Process terminated with status 0 (0 minutes, 5 seconds)
            0 errors, 0 warnings


            Je confirme l'erreur de link, est tu sur des noms de fichiers ?

            si tu est sous code::blocks :
            fait clic droit sur personnage.cpp
            propertie
            onglet buil et tu coche tout
            • Partager sur Facebook
            • Partager sur Twitter
              4 mai 2008 à 21:26:46

              renoome ton main.c en .cpp ;)
              • Partager sur Facebook
              • Partager sur Twitter
                4 mai 2008 à 21:29:15

                Merci beaucoup !!! Ca marche effectivement :D Je n'y avais jamais songé mais je ne comprends pas pourquoi Code Block ne link pas par defaut les fichiers :o

                Le problème est résolu !
                • Partager sur Facebook
                • Partager sur Twitter
                  4 mai 2008 à 21:30:45

                  Il le fait presque, lorsque tu intègre un nouveau fichier, ces choix te sont proposés, il faut penser a les cocher a ce moment la ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 mai 2008 à 21:31:20

                    normalement quand tu ajoutes des fichiers, CB demande si tu veux les ajouter à la compilation et au link (avec 8.02 au tout cas)

                    edit: grilled
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 mai 2008 à 21:33:45

                      Je vous remercie tous les deux ! :)
                      C'est vrai que le choix est proposé mais j'avais jamais eu ce problème sous l'ancienne version de CB. J'y penserai a l'avenir ;)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      POO problème de classes

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown