J’ai écrit un programme qui permet de créer des bâtiments comportant chacun des bureaux où des employés peuvent se déplacer d’un bureau à un autre. J’ai dix erreurs que je n’arrive pas à corriger.
Mes fichiers .h, . cpp et ma main sont les suivants :
bureau.h :
#include<iostream>
class bureau
{
int num;
bool ouvert;
public :
bureau(int n):num(n), ouvert(false){}
int getnum(){return num;}
void setnum (int n){num=n;}
bool ouverture(){return ouvert;}
void ouvrir()
{ouvert=true;}
void fermer()
{ouvert=false;}
~bureau();
};
batiment.h :
#include<iostream>
#include"bureau.h"
class batiment
{
protected :
int num;
int nbbur;
public :
batiment(int n, int nb):num(n),nbbur(nb){}
int getnum() {return num;}
void setnum(int n) {num = n;}
int getnbbur() {return nbbur;}
void setnbbur(int n) {nbbur=n;}
~batiment();
};
employe.h :
#include"batiment.h"
#include"bureau.h"
using namespace std;
class employe
{
private :
bureau bur;
batiment bat;
public :
employe(batiment ba, int num):bur(num), bat(ba){}
void aller(batiment ba, int n)
{
bureau B(n);
if(bur.ouverture()==false)
{
bur.ouvrir();
cout<<"l'employe ouvre le bureau"<<bur.getnum()<<endl;
}
if(ba.getnum()!= bat.getnum())
{
cout<<"je quitte le batiment"<<bat.getnum()<<endl;
bat.setnum(ba.getnum();
cout<<"je suis arrive au batiment "<<bat.getnum()<<endl;
}
else
cout<<"je reste dans le batiment"<<endl;
cout<<"j'ouvre le bureau "<<n<<endl;
B.ouvrir();
bur.setnum(n);
cout<<"j'arrive au bureau "<<n<<endl;
}
};
Il faudrait peut-être que tu postes les erreurs aussi... D'après une rapide recherche sur Google, il semblerait que l'erreur c2228 se rapporte aux chaînes de caractères, peut-être un problème avec tes cout ? Bonne chance
1>main.cpp
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\bureau.h(4) : error C2011: 'bureau' : 'class' type redefinition
1> c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\bureau.h(4) : see declaration of 'bureau'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(8) : error C2079: 'employe::bur' uses undefined class 'bureau'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(25) : error C2958: the left parenthesis '(' found at 'c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(23)' was not matched correctly
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(14) : error C2079: 'B' uses undefined class 'bureau'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(15) : error C2228: left of '.ouverture' must have class/struct/union
1> type is 'int'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(17) : error C2228: left of '.ouvrir' must have class/struct/union
1> type is 'int'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(18) : error C2228: left of '.getnum' must have class/struct/union
1> type is 'int'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(23) : error C2143: syntax error : missing ')' before ';'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(29) : error C2228: left of '.ouvrir' must have class/struct/union
1> type is 'int'
1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(30) : error C2228: left of '.setnum' must have class/struct/union
1> type is 'int'
1>Build log was saved at "file://c:\Documents and Settings\khaoula\Mes documents\Visual Studio 2005\Projects\ex5tp3\ex5tp3\Debug\BuildLog.htm"
1>ex5tp3 - 10 error(s), 0 warning(s)
Déja, d'aprè ce que j'ai vu globalement, tu ne dois pas mettre le corps de tes foncions dans le .h, mets les prototypes seulement. c'est de là que vient le problème.
1- les .h sont faits pour mettre les prototypes.
2- les .cpp (.c) sont faits pour mettre les corps (tout le code qui ne doit pas être mis dans le .h
Voila j'espère t'avoir été utile.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.
fissal_houate > pour des si petits corps on peut très bien les mettre dans les .h
EDIT : J'avais pas vu la méthode aller de employer : elle, elle peut être mise dans un .cpp
l'erreur 1 (et peut-être la seule) est que tu inclus bureau.h dans batiment.h et batiement.h est inclus AVEC bureau.h dans employe.h... le tout sans garde anti-inclusion multiple : FAQ Developpez premier exemple
J'ai ajouté la parenthèse dans employe.h au niveau de
bat.setnum(ba.getnum();
et défini les destructeurs
~bureau();
et
~batiment();
qui étaient seulement déclarés.
Le programme a tourné quand j'ai supprimé cet include :
#include"bureau.h"
au niveau du fichier employe.h
Bon week end
[C++] error C2228
× 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.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.