Problème C++
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
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
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.
- 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.
C'est bon le gros problème est que j'avais pas dit que personage.cpp fait parti du projet (dans codeblocks) ^^
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 :
... ou pour le constructeur :
Enfin pour avoir un code C++ propre, il serait souhaitable de définir le constructeur de copie et l'opérateur =.
Bon courage ;-)
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 ;-)