Partage
  • Partager sur Facebook
  • Partager sur Twitter

Classe : problème Linker

Avec le constructeur...

    23 juin 2007 à 11:50:03

    Salut à tous, alors voilà je m'étais mis à fond dans la programmation puis j'ai arrêté pendant un temps pour des raisons plus ou moins bonnes et là j'ai eu une soudaine envie de m'y remettre donc j'ai lu les cours de C++ (très bons comme d'habitude).
    Seulement voilà, j'ai un problème. A la partie "Les classes 1/2", la compilation du code ne signale aucune erreur. Mais dès que j'arrive à "Les classes 2/2" où l'on commence à entrer un constructeur dans le code, alors là j'ai des :

    Compilation de main.cpp :

    "[Linker error] undefined reference to `Personnage::Personnage()"
    "[Linker error] undefined reference to `Personnage::Personnage()"
    "[Linker error] undefined reference to `Personnage::attaquer(Personnage&)"
    "ld returned 1 exit status"

    Compilation de Personnage.cpp :

    "In function `bool estVivant()':"
    "`m_vie' undeclared (first use this function)"

    Voici les codes des trois fichiers main.cpp, Personnage.cpp et Personnage.h (note : j'ai téléchargé le code fourni dans le cours, et à la compilation j'ai les mêmes erreurs donc je suppose que ça vient de moi).

    main.cpp

    #include <iostream>
    #include <string>
    #include "Personnage.h"

    using namespace std;

    int main()
    {
        Personnage david, goliath;
       
        goliath.attaquer(david);
       
        return 0;
       
    }


    Personnage.cpp

    #include <string>
    #include "Personnage.h"

    using namespace std;

    void Personnage::attaquer(Personnage &cible)
    {
         cible.degatsRecus(m_degatsArme);
         }
         
    void Personnage::degatsRecus(int degatsArme)
    {
         m_vie -= degatsArme;
         
         if(m_vie < 0) { m_vie = 0; }
         }
         
    void Personnage::boirePotionVie(int qtePotion)
    {
         m_vie += qtePotion;
         
         if(m_vie > 100) { m_vie = 100; }
         }
         
    void Personnage::changerArme(string nomNouvelleArme, int degatsNouvelleArme)
    {
         nomArme = nomNouvelleArme;
         m_degatsArme = degatsNouvelleArme;
         }

    bool estVivant()
    {
         if(m_vie > 0) {return true;}
         else          {return false;}
         }
         
    Personnage::Personnage()
    {
          m_vie = 100;
          m_mana = 100;
          nomArme = "Baton";
          m_degatsArme = 5;
          }


    Personnage.h

    #ifndef DEF_PERSONNAGE
    #define DEF_PERSONNAGE

    class Personnage
    {
          public:
           
          Personnage();
               
          void attaquer(Personnage &cible);
           
          void degatsRecus(int degatsArme);
           
          void boirePotionVie(int qtePotion);
           
          void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
           
          bool estVivant();
           
         
          private:
                 
          int m_vie;
          int m_mana;
          std::string nomArme;
          int m_degatsArme;
          };

    #endif


    Voilà, j'espère que vous pourrez m'aider. Et je signale à nouveau que ces problèmes n'interviennent qu'APRES l'implémentation du constructeur Personnage().
    Et quelqu'un peut-il m'expliquer, au passage, à quoi sert le #infndef [...] ?
    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 juin 2007 à 14:57:31

      Le ifndef sert à protéger ton fichier des inclusions infinies.Dans ce cas il est inutile mais il faut tours prendre l'habitude de le mettre
      • Partager sur Facebook
      • Partager sur Twitter
        23 juin 2007 à 15:14:46

        Merci pour cette explication ;)
        Personne d'autre pour mon autre problème ? :(
        • Partager sur Facebook
        • Partager sur Twitter
          23 juin 2007 à 17:59:07

          dans ton Personnage.cpp il te manque le Personnage:: :
          bool Personnage::estVivant()
          {
               return (m_vie > 0);
          }
          • Partager sur Facebook
          • Partager sur Twitter
            23 juin 2007 à 18:46:29

            les liker error de ce genre c'est 80% de chance que ca se passe dans le main l'erreur ;)
            • Partager sur Facebook
            • Partager sur Twitter
              23 juin 2007 à 18:50:27

              En effet il y avait l'erreur de bool Personnage::estVivant, mais en plus je n'avais pas mis les fichiers dans le même projet et il ne trouvait pas le main, merci à tous les trois ^^
              J'me sens con quand même parfois...
              • Partager sur Facebook
              • Partager sur Twitter

              Classe : problème Linker

              × 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