[C++] Problème headers

Résolu/Fermé
Utilisateur anonyme - 4 janv. 2008 à 11:36
 Utilisateur anonyme - 4 janv. 2008 à 21:20
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 :

#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
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
0
Utilisateur anonyme
4 janv. 2008 à 16:43
Salut,

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 :
#include"bureau.h"
au niveau du fichier employe.h

Bonne fin de journée :)
0
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
0
Utilisateur anonyme
4 janv. 2008 à 21:20
Merci de tes conseils :)

Bonne soirée :)
0