Téléchargement
illégal
Posez votre question Signaler

Probleme fichier .h .cpp compilation c++ [Résolu]

corleone - Dernière réponse le 1 oct. 2010 à 17:03
Bonjour,
Je dois écrire un programme en c++ et je rencontre un probleme lors de la compilation avec dev c++ (même problème avec borland c++5.5):
Compilateur: Default compiler
Execution de g++.exe...
g++.exe "C:\Users\****\Desktop\Pro\mainResto.cpp" -o "C:\Users\****\Desktop\Pro\mainResto.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -I"C:\Users\****\Desktop\Pro" -L"C:\Dev-Cpp\lib"
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x290):mainResto.cpp: undefined reference to `client::affiche()'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x2c7):mainResto.cpp: undefined reference to `client::mange(int)'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x3a4):mainResto.cpp: undefined reference to `client::affiche()'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x40c):mainResto.cpp: undefined reference to `sportif::affiche()'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x443):mainResto.cpp: undefined reference to `sportif::mange(int)'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x520):mainResto.cpp: undefined reference to `sportif::affiche()'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x59a):mainResto.cpp: undefined reference to `habitue::affiche()'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x5d1):mainResto.cpp: undefined reference to `client::mange(int)'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text+0x757):mainResto.cpp: undefined reference to `habitue::affiche()'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN6clientD1Ev[client::~client()]+0xb):mainResto.cpp: undefined reference to `vtable for client'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN7sportifD1Ev[sportif::~sportif()]+0xb):mainResto.cpp: undefined reference to `vtable for sportif'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN6clientD2Ev[client::~client()]+0xb):mainResto.cpp: undefined reference to `vtable for client'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN7habitueD1Ev[habitue::~habitue()]+0xb):mainResto.cpp: undefined reference to `vtable for habitue'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN7habitueC1Edi[habitue::habitue(double, int)]+0x101):mainResto.cpp: undefined reference to `vtable for habitue'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN6clientC2EdSs[client::client(double, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0xe):mainResto.cpp: undefined reference to `vtable for client'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN7sportifC1Ev[sportif::sportif()]+0x104):mainResto.cpp: undefined reference to `vtable for sportif'
C:\Users\****-\AppData\Local\Temp/ccQnaaaa.o(.text$_ZN6clientC1EdSs[client::client(double, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0xe):mainResto.cpp: undefined reference to `vtable for client'
collect2: ld returned 1 exit status
Execution terminee
Si je place toutes les fonctions présentes des .cpp dans les .h, alors ça fonctionne parfaitement. Mais je dois absolument rendre mon projet avec des .cpp et des .h séparés.
voici les differents fichiers:
//mainresto.cpp
#include <cstdio>
#include "client.h"
#include "habitue.h"
#include "sportif.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{
cout <<"nouveau client\n"<<endl;
client cl1;// creation d'un nouveau client
cl1.affiche(); // affichage des attributs du nouveau client (nom et nb de calories, par defaut)
cout <<"\n"<<endl;
cl1.mange(150);
cl1.changeNom("Mr machin");
cl1.affiche();
cout <<"\n"<<endl;
cout <<"nouveau sportif\n"<<endl;
sportif cl2;
cl2.affiche();
cout <<"\n"<<endl;
cl2.mange(500);
cl2.changeNom("Mr Chose");
cl2.affiche();
cout <<"\n"<<endl;
cout <<"nouvel habitue\n"<<endl;
habitue cl3;
cl3.affiche();
cout <<"\n"<<endl;
cl3.mange(200);
cl3.changeNom("Mme Truc");
cl3.affiche();
// client.cpp
#include "client.h"
#include <string>
#include <cstdio>
#include <iostream>
using namespace std;
void client::affiche() {
cout << "nom : " << nom <<"\n Calories ingurgitees : " << nbCalAccu << endl;
}
double client::mange (int qttNour){
nbCalAccu += qttNour;
return nbCalAccu;
}
//client.h
#ifndef CLIENT_H
#define CLIENT_H
#include <string>
#include <iostream>
#include <ctime>
using namespace std;
class client{ public:
string nom;
double nbCalAccu;
client(double calo=3000 , string nm ="monsieur X") : nbCalAccu(calo) , nom(nm) {};
void changeNom(string nvnom){
nom = nvnom;
return;
}
virtual void affiche() ;
virtual double mange (int qttNour);
};
#endif
//habitue.cpp
#include "client.h"
#include "habitue.h"
#include <string>
#include <cstdio>
#include <iostream>
using namespace std;
void habitue::affiche(){
client :: affiche();
cout << "anciennete : " << annees <<" ans" << endl;
}
//habitue.h
#ifndef HABITUE_H
#define HABITUE_H
#include <string>
#include <ctime>
using namespace std;
class habitue : public client { public:
int annees;
//double nbCalAccu;
habitue (double calo = 5000 , int ans = 3) : client(calo), annees(ans) {};
void affiche();
};
#endif
Désolé pour le message très long mais je préfère vous donner tout le code (même si je n'ai pas mis les fichiers "sportifs" qui sont construits exactement comme "habitue").
Merci d'avance de vos réponses. J'espère que vous pourrez m'aider, ça fait 4 jours que je bloque là dessus...
Lire la suite 

Probleme fichier .h .cpp compilation c++ »

8 réponses
Réponse
+1
moins plus
Bonjour

Je m'en tiens au premier message d'erreurs, la plupart des autres ont l'air d'être dus au même problème

dans mainresto.cpp, tu utilises la méthode affiche de la classe client, mais cette méthode n'est déclarée nulle part . Elle n'apparaît pas dans client.h
il FAUT la définir, ou au moins la déclarer, dans client.h, le compilateur n'a pas les moyens de la deviner.
Ajouter un commentaire
Réponse
+0
moins plus
affiche est bien déclarer dans client.h.
J'ai plutôt l'impression que tu a oublié de compiler TOUT les .cpp avant de faire le lien.
Avec DevCpp, quand tu as plusieurs fichier sources (.cpp) il faut créer un projet pour compiler correctement.
le père - 9 janv. 2008 à 15:08
Désolé. Je ferais mieux de faire la sieste...
Ajouter un commentaire
Réponse
+0
moins plus
merci pour vos réponses.
le problème est que j'ai fait un projet avant de compiler sous dev c++. Et avant ça, j'avais essayé de compiler avec borland c++, en compilant chaque cpp... mais toujours ces erreurs...
au cas où j'ai mal fait la manip sous dev c++, peux-tu m'expliquer en détails la démarche?
Merci encore
Ajouter un commentaire
Réponse
+0
moins plus
Dans DevCpp tu crée un projet, puis tu ajoute tout te fichiers source. Et normalement ça fonctionne.
Le mieux est peux être de le faire à la main, tu commence par créer les fichier object :
g++ -c *.cpp I...
une foi que tout tes .cpp sont transformer en .o tu les lie ensemble
g++ *.o -o prog.exe -L... etc.
Ajouter un commentaire
Réponse
+0
moins plus
Merci beaucoup!! Ca fonctionne enfin!!!!
(enfin pour l'instant!)
Bonne fin de journée et encore merci!!!!
Ajouter un commentaire
Réponse
+0
moins plus
salut Corleone, j'aimerais que tu m'explique le but de ton programme. j'aimerias bien comprendre malgre qu'il soit deja resolu. j'aimerias aussi savoir si tu utilise les fichiers .h s'il te plait je veux juste comprendre.
merci.
Ajouter un commentaire
Réponse
+0
moins plus
ton problem est le voila :
quand t'utulise pour entrer une valeur t'utilise le point . tu doi utiliser le
->
Ajouter un commentaire
Ce document intitulé « probleme fichier .h .cpp compilation c++ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?