Rechercher : dans
Par :

Problème de compilation en dev c++

Dernière réponse le 25 nov 2007 à 16:29:19 axelandre, le 25 nov 2007 à 11:57:02 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « problème de compilation en dev c++ » dans :
Compiler un programme en C avec Dev C++ sous Vista VoirIl est très probable que vous ayez des problèmes lors de la compilation d'une source C sous Vista avec Dev C++. Solution rapide de secours: le compilateur g++ Voici une astuce pour Dev-Cpp : Aller dans "Outils" -> "Options du compilateur" puis...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Compiler du C sous Linux/UNIX VoirSous Linux, le compilateur de C est gcc. Il est installé de base sur plusieurs distributions, mais sur Debian (et celles qui en découlent) il faudra l'installer (aptitude install gcc). gcc Syntaxe de GCC gcc Tout d'abord, il faut savoir...

1

fiddy, le 25 nov 2007 à 12:07:58
  • +1

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
Google is your friend

Répondre à fiddy

2

axelandre, le 25 nov 2007 à 12:19:01

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.

Répondre à axelandre

3

fiddy, le 25 nov 2007 à 12:24:42
  • +1

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.

Répondre à fiddy

4

axelandre, le 25 nov 2007 à 12:36:27

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

Répondre à axelandre

5

fiddy, le 25 nov 2007 à 12:54:13

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
Google is your friend

Répondre à fiddy

6

axelandre, le 25 nov 2007 à 13:02:34

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

Répondre à axelandre

7

 fiddy, le 25 nov 2007 à 16:29:19

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
Google is your friend

Répondre à fiddy