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...
Configuration: Windows Vista
Firefox 2.0.0.11
dev c++