Bug : Constructeur
Résolu
TheYoungGeek43
Messages postés
112
Statut
Membre
-
TheYoungGeek43 Messages postés 112 Statut Membre -
TheYoungGeek43 Messages postés 112 Statut Membre -
Bonjour,
J'ai un problème quand j'initialise dans mon constructeur il me sort une erreur
Mon constructeur
mon bug est au niveau du
Mon compilateur me dit :
Merci d'avance pour vos réponse
J'ai un problème quand j'initialise dans mon constructeur il me sort une erreur
Mon constructeur
Personnage::Personnage(string nomArme, int degatsArme) { m_vie = 100; m_mana = 100; m_arme = nomArme; m_arme = degatsArme; }
mon bug est au niveau du
m_arme = nomArme; m_arme = degatsArme;
Mon compilateur me dit :
Erreur IntelliSense : aucun opérateur "=" ne correspond à ces opérandes
les types d'opérandes sont : Arme = std::string Pratique Personnage.cpp 16
Merci d'avance pour vos réponse
2 réponses
Tu es sur la voie.
pour que ça marche il te faut un truc comme ça:
Personnage::Personnage(string nomArme, int degatsArme) { //à cet instant monArme est un string et degatsArme est un int, hé oui m_vie = 100; m_mana = 100; m_arme = nomArme;//là je ne connais pas le type de m_arme mais tu essayes d'y allouer un string; m_arme = degatsArme;//là m_arme n'a pas changé de type et tu essaye d'y allouer un int, forcément une ligne au moins ne marche pas (et peut être les deux). Et de plus c'est inutile, tu demandes 2 paramètres et tu en écrases un par l'autre. }
pour que ça marche il te faut un truc comme ça:
Personnage::Personnage(string nomArme, int degatsArme) { m_vie = 100; m_mana = 100; m_monArme = nomArme;//de type string m_degatsArme = degatsArme;//de type int }
désoler j'ai du mal m'exprimer donc on sait pas bien compris :s car moi je suis en train d'apprendre avec le livre du site du zero dans le cours le constructeur ressemble à ça
Sauf que moi je trouve cette façon de faire des moche donc je voulais le faire de la façon que j'ai essayer mais que ça me bloque
Personnage::Personnage(string nomArme, int degatsArme) : m_vie(100), m_mana(100), m_arme(nomArme, degatsArme) { }
Sauf que moi je trouve cette façon de faire des moche donc je voulais le faire de la façon que j'ai essayer mais que ça me bloque
Bonjour,
Mais pourtant je l'ai déjà fait dans le .h
Personnage.h
Personnage .cpp
Esque tu à besoin du code de la class Arme?
Mais pourtant je l'ai déjà fait dans le .h
Personnage.h
#ifndef DEF_PERSONNAGE #define DEF_PERSONNAGE #include <string> #include "Arme.h" class Personnage { public: Personnage(std::string nomArme, int degatsArme); // Constructeur Personnage::Personnage(); Personnage::Personnage(int vie, int mana); void recevoirDegats(int nbDegats); void attaquer(Personnage &cible); void boirePotionDeVie(int quantitePotion); void changerArme(string nomNouvelleArme, int degatsNouvelleArme); bool estVivant() const; ~Personnage(); private: int m_vie; int m_mana; Arme m_arme; // J'avait deja mis se que tu ma dit de mettre XD }; #endif // !DEF_PERSONNAGE
Personnage .cpp
#include <string> #include <iostream> #include "Personnage.h" using namespace std; Personnage::Personnage() { m_vie = 100; m_mana = 100; } Personnage::Personnage(string nomArme, int degatsArme) { m_vie = 100; m_mana = 100; m_arme = nomArme; m_arme = degatsArme; } Personnage::Personnage(int vie, int mana) { m_vie = 100; m_mana = 100; } void Personnage::recevoirDegats(int nbDegats) { m_vie -= nbDegats; if (m_vie < 0) { m_vie = 0; } } void Personnage::attaquer(Personnage &cible) { /*cible.recevoirDegats(m_degatArme);*/ } void Personnage::boirePotionDeVie(int quantitePotion) { m_vie += quantitePotion; if (m_vie > 100) { m_vie = 100; } } void Personnage::changerArme(string nomNouvelleArme, int degatsNouvelleArme) { /* = nomNouvelleArme;*/ /*m_arme = degatsNouvelleArme;*/ } bool Personnage::estVivant() const { if (m_vie > 0) { return true; } else { return false; } } Personnage::~Personnage() { }
Esque tu à besoin du code de la class Arme?
Hum tellement l'habitude de la façon dynamique que j'ais dit une bêtise.
L'appel d'un constructeur d'un sous-objet c'est forcément par la méthode "moche" si on utilise pas de pointeur.
Tu peux très bien faire:
C'est toujours mieux que faire des mixtes.
PS:Mets toutes les sources nécessaires à la compréhension on ne peut pas deviner tes classes.
L'appel d'un constructeur d'un sous-objet c'est forcément par la méthode "moche" si on utilise pas de pointeur.
Personnage::Personnage(string nomArme, int degatsArme): m_arme(nomArme, degatsArme) { m_vie=100; m_mana=100; }
Tu peux très bien faire:
Personnage::Personnage(string nomArme, int degatsArme) : m_vie(100), m_mana(100), m_arme(nomArme,degatsArme) { }
C'est toujours mieux que faire des mixtes.
PS:Mets toutes les sources nécessaires à la compréhension on ne peut pas deviner tes classes.
Aller je t'aide.
Il y a ce jeux de bébé, ou tu dois faire passer des formes dans des trous correspondants.
Tu vois le trou rond et y passe avec succès un cylindre, ensuite dans ce même trou, tu essayes le cube et là ça ne marche plus, pourquoi?
Oups, on parle pas de physique quantique ici, mauvais topic ;-)
Si j'ai compris ton truc sa veut dire que j'aurais du mettre