[C++] Problème headers
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
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. J'ai posté le message avant mais je n'ai pas eu de réponses, je pense qu'il s'agit d'un problème au niveau de mes headers.
Mes fichiers .h, . cpp et ma main sont les suivants :
bureau.h :
batiment.h :
employe.h :
main.cpp :
Merci de vos réponses :)
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. J'ai posté le message avant mais je n'ai pas eu de réponses, je pense qu'il s'agit d'un problème au niveau de mes headers.
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; } };
main.cpp :
#include<iostream> #include"employe.h" void main() { batiment b1(1,3); batiment b2(2,4); employe E(b1,3); E.aller(b2,2); }
Merci de vos réponses :)
2 réponses
Bonjour
Vers le milieu de employe.h, il manque une parenthèse à la fin de
Les destructeur ~bureau(); et ~batiment(); sont seulement déclarés, pas définis. Il faudrait ~bureau() {} et ~batiment() {} pour les définir.
Je te renvoie aux manuels pour la différence entre déclarer et définir.
D'ailleurs, d'une manière générale, les headers ne devraient contenir que des déclarations, pas des définitions
Vers le milieu de employe.h, il manque une parenthèse à la fin de
bat.setnum(ba.getnum();
Les destructeur ~bureau(); et ~batiment(); sont seulement déclarés, pas définis. Il faudrait ~bureau() {} et ~batiment() {} pour les définir.
Je te renvoie aux manuels pour la différence entre déclarer et définir.
D'ailleurs, d'une manière générale, les headers ne devraient contenir que des déclarations, pas des définitions
pour éviter les problèmes des fichiers inclus 2 fois, on fait souvent dans les fichiers .h
#ifndef __INCLUDEBUREAU
#define __INCLUDEBUREAU
(contenu du fichier.h
#endif
comme ça, lors d'une deuxième inclusion, comme __INCLUDEBUREAU est déjà défini on n'inclut plus rien du tout et il n'y a pas de problème.
Evidemment, le symbole __INCLUDEBUREAU doit être différent pour chaque fichier .h !
Bon week-end
#ifndef __INCLUDEBUREAU
#define __INCLUDEBUREAU
(contenu du fichier.h
#endif
comme ça, lors d'une deuxième inclusion, comme __INCLUDEBUREAU est déjà défini on n'inclut plus rien du tout et il n'y a pas de problème.
Evidemment, le symbole __INCLUDEBUREAU doit être différent pour chaque fichier .h !
Bon week-end
Merci. J'ai ajouté la parenthèse dans employe.h et défini les destructeurs.
Le programme a tourné quand j'ai supprimé cet include : au niveau du fichier employe.h
Bonne fin de journée :)