Bug : Constructeur

Résolu
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
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

Jwtdd
 
Salut, tu cibles assez bien le "bug", il n'y a vraiment rien qui te choques?
1
Utilisateur anonyme
 
Ha oui moi qui ne fais pas de C++, ça me pique les yeux...
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?
0
ElementW Messages postés 5690 Statut Contributeur 1 224 > Utilisateur anonyme
 
et là ça ne marche plus, pourquoi?
Bah le pauvre, parce que le principe d'incertitude fait qu'on ne peut pas savoir si ça va passer ou pas on peut pas savoir!
Oups, on parle pas de physique quantique ici, mauvais topic ;-)
0
TheYoungGeek43 Messages postés 112 Statut Membre
 
Salut
Si j'ai compris ton truc sa veut dire que j'aurais du mettre
string m_arme = nomArme;
m_arme = degatsArme;
0
Utilisateur anonyme
 
Tu es sur la voie.
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
}

0
TheYoungGeek43 Messages postés 112 Statut Membre
 
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

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
0
JwTdd
 
si m_arme est un objet alors il faut faire appel au constructeur paramétrique correspondant a sa classe,exemple si la classe s'appelle Arme:
Arme m_arme(nomArme, degatsArme);
0
TheYoungGeek43 Messages postés 112 Statut Membre
 
Bonjour,
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?
0
JwTdd
 
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.

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.
0
TheYoungGeek43 Messages postés 112 Statut Membre
 
Merci de tes réponse je vais faire comme ça maintenant ;)
0