Bonjour a tous j'apprend le C++, et j'en suis au debut des classes.

J'ai un probleme que je n'arrive pas a resoudre : Undefined reference to ... avec toutes les lignes du main.


Fichier .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
24
25
#include <string>
 
class Personnage
{
    public: //Type public
 
    Personnage(); // Le constructeur ( par defaut) qui doit toujours avoir le meme nom que la classe, n'a pas de type de retour
    //Les prototypes methode toujours sans la classe
    Personnage(std::string nomArme, int degatsArme);
 
    void recevoirDegats(int nbDegats);
    void attaquer(Personnage &cible);
    void boirePotionDeVie(int quantitePotion);
    void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
    bool estVivant() const;
    void afficherEtat() const;
 
    private://Mettre toujours Privates les attribut (= variables)
 
    int m_vie;
    int m_mana;
    std::string m_nomArme; //Pas de using namespace std, il faut donc mettrestd:: devant string
    int m_degatsArme;
};
#endif

Fichier cpp:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "Personnage.h" // Ne pas oublier
using namespace std;
 
Personnage::Personnage() : m_vie(100), m_mana(100), m_nom("Epée rouillée"), m_degatsArme(10);//Le constructeur (par defaut),( avec liste d'initialisation) qui initialise les attributs, le main peut desormais utiliser l'objet Personnage
{
  //Rien mettre dans le corps du constructeur, tout a deja ete fait
}
 
//Autre constructeur
Personnage::Personnage(string nomArme, int degatsArme) : m_vie(100),m_mana(100),m_nomArme(nomArme), m_degatsArme(degatsArme)
{
 
}
 
 
void Personnage::recevoirDegats(int nbDegats)
{
    m_vie -= nbDegats;
    //On enlève le nombre de dégâts reçus à la vie du personnage
    if (m_vie < 0) //Pour éviter d'avoir une vie négative
    {
        m_vie = 0; //On met la vie à 0 (cela veut dire mort)
    }
}
void Personnage::attaquer(Personnage &cible)
{
    cible.recevoirDegats(m_degatsArme);
    //On inflige à la cible les dégâts que cause notre arme
}
void Personnage::boirePotionDeVie(int quantitePotion)
{
    m_vie += quantitePotion;
    if (m_vie > 100) //Interdiction de dépasser 100 de vie
    {
        m_vie = 100;
    }
}
void Personnage::changerArme(string nomNouvelleArme, int
degatsNouvelleArme)
{
    m_nomArme = nomNouvelleArme;
    m_degatsArme = degatsNouvelleArme;
}
bool Personnage::estVivant() const
{
    if (m_vie > 0) // Plus de 0 de vie ?
    {
        return true; //VRAI, il est vivant !
    }
    else
    {
        return false; //FAUX, il n'est plus vivant !
    }
}
void Personnage::afficherEtat()
{
    cout <<"Vie : " << m_vie << endl;
    cout << "Mana : " << m_mana << endl;
    m_arme.afficher();
}

Fichier main :

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
#include <iostream>
#include "Personnage.h" //Ne pas oublier
using namespace std;
int main()
{
    //Création des personnages
    Personnage david, goliath("Épée aiguisée", 20);
 
    //Au combat !
    goliath.attaquer(david);
    david.boirePotionDeVie(20);
    goliath.attaquer(david);
    david.attaquer(goliath);
    goliath.changerArme("Double hache tranchante vénéneuse de la mort", 40);
    goliath.attaquer(david);
 
    //Temps mort ! Voyons voir la vie de chacun…
    cout << "David" << endl;
    david.afficherEtat();
    cout << endl << "Goliath" << endl;
    goliath.afficherEtat();
 
    return 0;
}

Ma version de code block est 12.11



Merci a tous pour votre aide.