[Résolu] Constructeur de classe differente qui s'imbrique sans le vouloir
Je débute dans l'apprentissage du C++ en suivant notamment les cours et tutoriels C++.
Ils donnent l'exemple pour apprendre a utiliser les classes un trés simple rpg à 2 joueurs.
Pour m'amuser un peu et pour m'entrainer j'ai un peu modifié le code mais j'ai un souci.
Je m'explique:
J'ai une classe personnage qui me permet de gerer mes joueurs. Le constructeur de cette classe lance deux fonctions pour donner un nom et choisir une arme.
J'ai une autre classe Combat qui me sert à gerer le combat (tour du joueur, etc.) et son constructeur n'est qu'une liste d'initialisation.
Dans mon main je crée deux objets combat et joueur1 et joueur2 et JUSTE ca. Voyez:
main.ccp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <iostream>
#include <string>
#include "Personnage.h"
#include "Combat.h"
using namespace std;
int main()
{
// On démarre le jeu
Combat combat1;
// On créé les deux personnages joueur1 et joueur2
Personnage joueur1, joueur2;
cout << "lol" << endl;
return 0; |
Personnage.cpp:
Code:
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
|
#include <iostream>
#include <string>
#include <limits>
#include "Personnage.h"
#include "Arme.h"
using namespace std;
// Constructeur
Personnage::Personnage() : m_vie(100), m_mana(100), m_nbPotion(3)
{
donnerNom();
donnerArme();
}
// Methodes
// Définir le nom et l'arme du personnage
void Personnage::donnerNom()
{
cout << "Quel est le nom du joueur ?" << endl;
cin >> m_nom;
}
void Personnage::donnerArme()
{
int choixArme;
cout << "Quel arme choisissez-vous ?" << endl;
cout << "1 - La lance (dégats : 18 pts)" << endl;
cout << "2 - L'epée en bronze (dégats : 19 pts)" << endl;
cout << "3 - La hache de fer (dégats : 20 pts)" << endl;
cout << "Votre choix : ";
cin >> choixArme;
} |
Personnage.h :
Code:
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
|
#ifndef DEF_PERSONNAGE
#define DEF_PERSONNAGE
#include <string>
#include "Arme.h"
class Personnage
{
public:
// Constructeur
Personnage();
// Methodes
// Definir le personnage : Nom + Arme
void donnerNom();
void donnerArme();
private:
std::string m_nom;
int m_vie;
int m_mana;
int m_nbPotion;
Arme m_arme;
};
#endif |
et enfin combat.cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#include <iostream>
#include <limits>
#include "Combat.h"
#include "Personnage.h"
using namespace std;
//Constructeur
Combat::Combat()
{
} |
Oups j'avais oublié le combat.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#ifndef DEF_COMBAT
#define DEF_COMBAT
#include "Personnage.h"
class Combat
{
public:
// Constructeur
Combat();
};
#endif |
Le probléme est que bien que le main doit crée deux objets joueur1 et joueur2 , quand j'execute mon programme la création d'un joueur (nom + arme) s'effectue 3 fois. En essayant de trouve le probléme, je me suis rendu compte que la ligne Combat combat1 lancé le constructeur de la classe Combat mais ce dernier lancé tout seul le constructeur de la classe Personnage.
Je reste bloqué sur cette erreur sans comprendre ce que j'ai mal codé. Merci de votre aide.