je suis actuellement le cours de programmation en C++ sur OpenClassrooms et j'en suis à la partie POO, plus particulièrement à la partie "Les Classes" où je suis face à un problème. J'ai voulu tester mon programme 'Personnage' mais lors de la compilation, mon IDE m'informe :
D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::Personnage()'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::Personnage()'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::attaquer(Personnage&)'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::boirePotionDeVie(int)'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::attaquer(Personnage&)'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::attaquer(Personnage&)'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::changerArme(std::string, int)'| D:\C++\Personnage\main.o:main.cpp|| undefined reference to `Personnage::attaquer(Personnage&)'| ||error: ld returned 1 exit status| ||=== Build failed: 9 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Je vous montre ce que contient mes différents fichiers.
Mon fichier main.cpp :
#include <iostream>
#include "Personnage.h"
using namespace std;
int main()
{
Personnage goliath, david;
//Création de 2 objets de type
//Personnage : Goliath et david
goliath.attaquer(david);
david.boirePotionDeVie(20);
goliath.attaquer(david);
david.attaquer(goliath);
goliath.changerArme("L'epee du roi",40);
goliath.attaquer(david);
return 0;
}
mon fichier Personnage.h :
#ifndef PERSONNAGE_H_INCLUDED
#define PERSONNAGE_H_INCLUDED
#include <string>
class Personnage
{
public :
Personnage(); //Construsteur
Personnage(std::string nomArme, int degatsArme);
void recevoirDegats(int nbreDegats);
void attaquer(Personnage &cible);
void boirePotionDeVie(int quantitePotion);
void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
bool estVivant();
private :
int m_vie, m_mana, m_degatsArme;
std::string m_nomArme;
};
#endif // PERSONNAGE_H_INCLUDED
Je ne comprends pas d'où vient le problème car j'ai aussi cocher les cases release et debug lors de la création des fichier .cpp et .h. Je précise aussi que je compile en GCC. Après avoir créer ces fichiers, la compilation ne pose aucun problème, mais après avoir fermer Codes::Blocks et valider les changements, le problème apparaît lorsque j'ouvre de nouveau Code::Blocks.
J'ai été voir le cours que tu m'as indiqué. Effectivement il n'est pas fini mais il a l'air plus complet sur certaines notions que j'ai vu que le cours que je suis. Je vais en parallèle chercher un autre cours pour les notions non abordées.
Mais il n'y a vraiment aucune solution pour mon problème ?
Non, faut l'utiliser "correctement", ce qui ne semble pas si simple avec Codes::Blocks.
Vérifiez que le fichier "Personnage.cpp" est compilé en "Personnage.o" avant que l'éditeur de lien ne commence et que ce fichier .o est dans la liste des fichiers en entré de l'éditeur de lien.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Tout c'est passé normalement, le fichier Personnage .o c'est bien créer comme d'habitude. J'ai pas encore pris l'habitude de parcourir tous les paramètres de code::blocks, pour mettre le fichier .o dans l'éditeur c'est bien dans compiler settings ?
C'était tout con ! Au fait, depuis que j'ai commencé à utiliser Code::Blocks je me suis toujours demandé comment refaire apparaître mes projets dans la barre de gauche après avoir rouvert Code::Blocks. Mais comme ça gênais pas dans les premiers programmes, je ne me posais pas plus la question. Il suffit de cliquer sur le lien correspondant sur la page de démarrage. Maintenant ça fonctionne.
Merci à tous !
PS : C'est normal que lorsque je compile une deuxième fois le code, ça me marque :
Target is up to date. Nothing to be done (all items are up-to-date).
Voudrait-il me dire que ça ne sert à rien de compiler une deuxième fois ?
PS2 : Cela sert vraiment-il à rien que je continue à suivre le cours du site ? comme dit scotthamilton.
Je ne comprends pas comment tu as résolu ton problème ? Moi j'ouvre bien mon projet avec le lien sur le menu démarrage mais cela ne change rien j'ai le même problème que tu avais ...je ne comprends pas et suis bloqué dans l'avancement des cours :(
Problème "undefined reference to" sur Code::Blocks
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
...