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.
Partager