Problème de compilation en dev c++

Fermé
axelandre Messages postés 35 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 22 septembre 2010 - 25 nov. 2007 à 11:57
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 nov. 2007 à 16:29
Bonjour à tous,

je me suis lancé dans le c++ pour utiliser la POO.

Mais j'ai un souci de compilation avec dev c++!

J'ai donc cherché sur internet si je pouvais trouver la solution mais impossible de mettre la main dessus!

J'ai créer (à l'aide d'un cours sur internet) un programme qui utilise deux classe : Personnage et Arme.

J'ai donc créer un fichier Personnage.h(pour indiquer les attributs et méthodes de la classe Personnage) et un fichier Personnage.cpp(pour executer les void). idem pour Arme.

Et bien sur le main.

Mais lorsque je compile, le compilateur m'indique une erreur : "In file included from main.cpp" dans le main. La ligne concernée est celle qui inclue le fichier Personnage.h (#include "Personnage.h").

Et je ne vois pas ce que je dois faire pour résoudre ce problème.

Alors je ne sais pas si je dois mettre mon code (ce qui va être un peu long).

Si quelqu'un a une idée je suis preneur.

merci à tous.

7 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
25 nov. 2007 à 12:07
Salut,

Tu as dû faire une erreur dans ton Personnage.h. Aurais-tu oublié par hasard de mettre un point-virgule à la fin de ta déclaration de classe ?

Cordialement
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
25 nov. 2007 à 12:24
En effet, il y a une petite étourderie dans ton void

m_vie- = nbDegats; C'est m_vie -= nbDegats ou m_vie-=nbDegats. Mais jamais d'espace entre le - et le =, même remarque pour le +=.

De plus, pourrais-tu poster ton Personnage.h. Et s'il te plait, utilise le bouton Conservation de la mise en forme tu texte sélectionné (bouton à côté de Souligné). Sinon c'est illisible.
0
axelandre Messages postés 35 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 22 septembre 2010
25 nov. 2007 à 12:36
Effectivement, ca a résolu les problème!

merci beaucoup^et pardon pour mon message précédent quiétait illisible.

Mais encore un souci...hélas!

lorsque je compile le main.cpp, les erreurs suivantes apparaissent :

[Linker error] undefined reference to `Personnage::Personnage()'
[Linker error] undefined reference to `Personnage::Personnage(std::string, int)'
[Linker error] undefined reference to `Personnage::attaquer(Personnage&)'
[Linker error] undefined reference to `Personnage::boirePotionDeVie(int)'
[Linker error] undefined reference to `Personnage::attaquer(Personnage&)'
[Linker error] undefined reference to `Personnage::afficherEtat()'
[Linker error] undefined reference to `Personnage::afficherEtat()'
[Linker error] undefined reference to `Personnage::~Personnage()'
[Linker error] undefined reference to `Personnage::~Personnage()'
[Linker error] undefined reference to `Personnage::~Personnage()'
[Linker error] undefined reference to `Personnage::~Personnage()'
ld returned 1 exit status

idem lorsque je compile personnage.cpp :

[Linker error] undefined reference to `Arme::Arme()'
[Linker error] undefined reference to `Arme::Arme()'
[Linker error] undefined reference to `Arme::Arme(std::string, int)'
[Linker error] undefined reference to `Arme::Arme(std::string, int)'
[Linker error] undefined reference to `Arme::getDegats() const'
[Linker error] undefined reference to `Arme::changer(std::string, int)'
[Linker error] undefined reference to `Arme::afficher()'
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status

idem pour Arme.cpp :

[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status

Faut-il que je te mette le code de chcun des fichiers concernés?

Merci beaucoup
0
axelandre Messages postés 35 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 22 septembre 2010
25 nov. 2007 à 13:02
Ha non, je n'ai pas créé la fonction WinMain.

En fait quand j'ai voulu faire ce programme, j'ai juste ouvert des fichiers source.

Donc voila mon fichier Personnage.h :

#ifndef DEF_PERSONNAGE
#define DEF_PERSONNAGE

#include "Arme.h"

class Personnage
{
    public:

    Personnage();
    Personnage(std::string nomArme, int degatsArme);
    ~Personnage();
    void recevoirDegats(int nbDegats);
    void attaquer(Personnage &cible);
    void boirePotionDeVie(int quantitePotion);
    void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
    bool estVivant();
    void afficherEtat();

    private:

    int m_vie;
    int m_mana;
    Arme m_arme;
};

#endif




Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
25 nov. 2007 à 12:54
As-tu programmé la fonction WinMain() car visiblement tu as créé un projet de type Application Windows ? Et comme je t'ai dit, ça serait bien que tu postes ton Personnage.h, juste pour vérifier.
Et n'oublie pas le bouton magique.

Cdt
-1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
25 nov. 2007 à 16:29
Serait-il possible d'avoir ton makefile ou la ligne de commande te permettant de compiler le tout.
Et n'oublie pas de faire la fonction WinMain() pour voir si l'erreur change ou pas.

Cdt
-1
axelandre Messages postés 35 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 22 septembre 2010
25 nov. 2007 à 12:19
Salut,

Alors bizzarement l'erreur n'est plus! je ne comprend pas pourquoi. Hier et ce matin ça la tout le temps fait et la comme par miracle, elle n'apparait plus.

En revanche trois autre problème surviennent.

Le premier concerne un void :

void Personnage::recevoirDegats(int nbDegats) //cela permet au compilateur de savoir que cette méthode se rapporte à la classe Personnage
{
m_vie- = nbDegats; //On enlève le nombre de dégats 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, donc le personnage meurt
}
}

Le compilateur, ici, m'indique que m_vie- = nbDegats, "expected primary-expression before '=' token.


Deuxième erreur est la meme que celle du dessus mais au lieu de m_vie-, c'est m_vie+.

Et la troisième erreur se trouve dans un void aussi :

void Personnage::changerArme(string nouvelleArme, int degatsNouvelleArme)
{
m_arme.changer(nomNouvelleArme, degatsNouvelleArme); //appelle de la méthode changer de m_arme.Le Personnage répercute donc la demande de changement d'arme à la méthode changer de son objet m_arme
}

le compilateur m'indique " 'nomNouvelleArme' undeclared(first use this function". Alors que nomNouvelleArme est déclaré dans le fichier Personnage.h.
Ce meme fichier personnage.h est mis en include dans le fichier Personnage.cpp (fichier où est constaté l'erreur).

merci pour ton aide.
-2