Bug : Constructeur

Résolu/Fermé
TheYoungGeek43 Messages postés 88 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 1 avril 2017 - Modifié par TheYoungGeek43 le 12/02/2015 à 13:24
TheYoungGeek43 Messages postés 88 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 1 avril 2017 - 13 févr. 2015 à 09:59
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
A voir également:

2 réponses

Salut, tu cibles assez bien le "bug", il n'y a vraiment rien qui te choques?
1
Utilisateur anonyme
12 févr. 2015 à 20:07
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > Utilisateur anonyme
12 févr. 2015 à 22:53
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 88 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 1 avril 2017
12 févr. 2015 à 22:49
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
12 févr. 2015 à 23:19
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 88 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 1 avril 2017
12 févr. 2015 à 23:45
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
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 88 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 1 avril 2017
Modifié par TheYoungGeek43 le 13/02/2015 à 09:44
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
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 88 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 1 avril 2017
13 févr. 2015 à 09:59
Merci de tes réponse je vais faire comme ça maintenant ;)
0