Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[debutant] Un constructeur qui appel un autre constructeur tout seul

1 réponse
Avatar
Beware
Je d=E9bute dans l'apprentissage du C++ en suivant notamment les cours
du site du zero.
Ils donnent l'exemple pour apprendre a utiliser les classes un tr=E9s
simple rpg =E0 2 joueurs.

Pour m'amuser un peu et pour m'entrainer j'ai un peu modifi=E9 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 =E0 gerer le combat (tour du
joueur, etc.) et son constructeur n'est qu'une liste d'initialisation.

Dans mon main je cr=E9e deux objets combat et joueur1 et joueur2 et
JUSTE ca. Voyez:

main.ccp :
[CODE]
#include <iostream>
#include <string>

#include "Personnage.h"
#include "Combat.h"

using namespace std;


int main()
{
// On d=E9marre le jeu
Combat combat1;

// On cr=E9=E9 les deux personnages joueur1 et joueur2
Personnage joueur1, joueur2;
cout << "lol" << endl;

return 0;
[/CODE]

Personnage.cpp:
[CODE]
#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=E9finir 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=E9gats : 18 pts)" << endl;
cout << "2 - L'ep=E9e en bronze (d=E9gats : 19 pts)" << endl;
cout << "3 - La hache de fer (d=E9gats : 20 pts)" << endl;
cout << "Votre choix : ";
cin >> choixArme;
}
[/CODE]

Personnage.h :
[CODE]
#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
[/CODE]

et enfin combat.cpp :
[CODE]
#include <iostream>
#include <limits>
#include "Combat.h"
#include "Personnage.h"

using namespace std;

//Constructeur
Combat::Combat()
{

}
[/CODE]

Oups j'avais oubli=E9 le combat.h
[CODE]
#ifndef DEF_COMBAT
#define DEF_COMBAT

#include "Personnage.h"

class Combat
{
public:

// Constructeur
Combat();

};


#endif
[/CODE]


Le probl=E8me est que bien que le main doit cr=E9e deux objets joueur1 et
joueur2 , quand j'execute mon programme la cr=E9ation d'un joueur (nom +
arme) s'effectue 3 fois. En essayant de trouve le probl=E9me, je me suis
rendu compte que la ligne Combat combat1 lanc=E9 le constructeur de la
classe Combat mais ce dernier lanc=E9 tout seul le constructeur de la
classe Personnage.

Je reste bloqu=E9 sur cette erreur sans comprendre ce que j'ai mal cod=E9.
Merci de votre aide.

1 réponse

Avatar
Beware
Bonjour,

bon, j'ai un peu avancé grace à un réponse sur le forum de
developpez.com

J'ai retiré les interfaces dans le constructeur de Personnage et le
probléme semble résolu.