Problème C++

ITACHI971 Messages postés 760 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai ces 2 codes d'erreurs quand je veux compiler, ca commence a me souler grave là !!!!!!

C:\Users\PEIN2\Mes projets en C et C++\personage\main.cpp|9|référence indéfinie vers « Personage::Personage() »|
C:\Users\PEIN2\Mes projets en C et C++\personage\main.cpp|9|référence indéfinie vers « Personage::Personage() »|

dans le main.cpp :

#include <iostream>
#include <string>
#include "personage.h"

using namespace std;

int main()
{
Personage david, goliath;

return 0;
}

dans le personage.cpp :

#include <string>
#include "personage.h"

using namespace std;

Personage::Personage()
{
m_vie = 100;
m_mana = 100;
m_nomArme = "Epée rouillée";
m_degatArme = 10;


void Personage::recevoirDegats(int nbDegats)

m_vie -= nbDegats; // On enlève le nombre de dégâts reçus à la vie du personnage

if (m_vie < 0) // Pour éviter d'avoir une vie négative
{
m_vie = 0; // On met la vie à 0 (ça veut dire mort)
}
}

void Personage::attaquer(Personage &cible)
{
cible.recevoirDegats(m_degatsArme); // On inflige à la cible les dégâts que causent notre arme
}

void Personage::boirePotionDeVie(int quantitePotion)
{
m_vie += quantitePotion;

if (m_vie > 100) // Interdiction de dépasser 100 de vie
{
m_vie = 100;
}
}

void Personage::changerArme(string nomNouvelleArme, int degatsNouvelleArme)
{
m_nomArme = nomNouvelleArme;
m_degatsArme = degatsNouvelleArme;
}

bool Personage::estVivant()
{
if (m_vie > 0) // Plus de 0 de vie ?
{
return true; // VRAI, il est vivant !
}
else
{
return false; // FAUX, il n'est plus vivant !
}
}

dans le personage.h :

#include <string>

class Personage
{
public :

Personage ();

void boirePotion(int quantitePotion);
void recevoirDegat(int degatArme);
void attaquer(Personage &cible);
void changerArme(std::string nomNouvelArme, int nouveauDegatArme);

private :

int m_vie;
int m_degatArme;
int m_nomArme;
int m_nana;
};

#endif // PERSONAGE_H_INCLUDED

3 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Heu, il y a beaucoup de raisons pour lesquelles la compilation ne peut pas bien se passer:
- problème de parenthèses dans 'Personage::Personage()' et 'void Personage::recevoirDegats(int nbDegats)',
- tantôt 'm_mana' et tantôt 'm_nana',
- 'int m_nomArme' et 'm_nomArme = "Epée rouillée"',
- tantôt 'm_degatsArme' et tantôt 'm_degatArme',
- tantôt 'recevoirDegats' et tantôt 'recevoirDegat',
- 'bool Personage::estVivant()' non déclaré dans la classe,
- et sans doute bien d'autres !

De la rigueur, de la rigueur que diable!
Bonne continuation.
0
ITACHI971 Messages postés 760 Date d'inscription   Statut Membre Dernière intervention   231
 
C'est bon le gros problème est que j'avais pas dit que personage.cpp fait parti du projet (dans codeblocks) ^^
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Si je peux me permettre "personnage" prend deux "n".
Il serait plus judicieux de noter tes headers c++ "hpp" afin de les distinguer des headers C.
Mêmes remarques que loupious pour le code (bon si tu as mal configuré ton projet, normal que tu ne les ai pas vu à la compilation).

Je te conseille également d'indenter ton code, ça t'évitera pas mal de problèmes d'accolades comme dans ton constructeur Personnage par exemple.

Par ailleurs le code est améliorable. Par exemple :

bool Personage::estVivant(){
  return m_vie > 0;
}


... ou pour le constructeur :

Personage::Personage():
    m_vie(100),
    m_mana(100),
    m_nomArme("Epée rouillée"),
    m_degatArme(0)
{}


Enfin pour avoir un code C++ propre, il serait souhaitable de définir le constructeur de copie et l'opérateur =.

Bon courage ;-)
0