[C++] inclusion multiple.
Résolu
Panda jack
Messages postés
64
Statut
Membre
-
Panda jack Messages postés 64 Statut Membre -
Panda jack Messages postés 64 Statut Membre -
Bonjour,
actuellement sur un projet en C++ pour mes études je souhaite le faire en suivant une architecture MVC (Modèle Vue Contrôleur) l'ayant déjà fait mais sur un projet Java, il faut en toute logique passer le contrôleur aux vue pour qu'elle puisse y faire appel (c'est lui qui contrôle entre-autre l'affichage des autres fenêtres). Sauf que voilà, ce qui ce ait bien en Java ce fait moins bien en C++ et plus particulièrement avec l'include de mes divers fichiers .h
Le contrôleur.h incluant le fichier fenêtre.h et le fichier fenetre.h incluant contrôleur.h ne pose pas de problème ... mais quand le fichier contrôleur.cpp inclut controleur.h et que fenetre.cpp inclut fenetre.h ; en toute logic le programme plante (une versification de non inclusion multiple étant fait dans les headers les fichier source ne peuvent pus les inclure).
Je ne sait pas si mes explications sont très claires, je n'ai pas mis le code car il est un peut long mais si cela peut vous aidez a m'aidez je peut le faire.
Merci d'avance de votre réponse, je suis vraiment perdu :'(
actuellement sur un projet en C++ pour mes études je souhaite le faire en suivant une architecture MVC (Modèle Vue Contrôleur) l'ayant déjà fait mais sur un projet Java, il faut en toute logique passer le contrôleur aux vue pour qu'elle puisse y faire appel (c'est lui qui contrôle entre-autre l'affichage des autres fenêtres). Sauf que voilà, ce qui ce ait bien en Java ce fait moins bien en C++ et plus particulièrement avec l'include de mes divers fichiers .h
Le contrôleur.h incluant le fichier fenêtre.h et le fichier fenetre.h incluant contrôleur.h ne pose pas de problème ... mais quand le fichier contrôleur.cpp inclut controleur.h et que fenetre.cpp inclut fenetre.h ; en toute logic le programme plante (une versification de non inclusion multiple étant fait dans les headers les fichier source ne peuvent pus les inclure).
Je ne sait pas si mes explications sont très claires, je n'ai pas mis le code car il est un peut long mais si cela peut vous aidez a m'aidez je peut le faire.
Merci d'avance de votre réponse, je suis vraiment perdu :'(
A voir également:
- [C++] inclusion multiple.
- Ecran multiple pc - Guide
- Excel cellule choix multiple - Guide
- Copier coller multiple - Guide
- Symbole inclusion ✓ - Forum Word
- Publication multiple instagram format - Guide
4 réponses
salut !
je pense que comme pour le mvc, tes classes ne doivent pas s'inclure entre elles mais simplement le main.
enfin je veux dire qu'il faut que tu fasse tes liaisons uniquement de manière hierarchique, et donc que les classes model n'incluent pas d'autres models, et de même pour les controlleur.
En fait il faut que sépare clairement les traitements je pense.
bne chance !
je pense que comme pour le mvc, tes classes ne doivent pas s'inclure entre elles mais simplement le main.
enfin je veux dire qu'il faut que tu fasse tes liaisons uniquement de manière hierarchique, et donc que les classes model n'incluent pas d'autres models, et de même pour les controlleur.
En fait il faut que sépare clairement les traitements je pense.
bne chance !
Bonjour,
Le C++ est différent du Java, il faut penser autrement.
En C++ les fichiers sont séparé, il y a plusieurs compilation.
Les règles pour les fichiers .h c'est de mettre des balises de garde :
Ensuite, il faut que les .h ne contiennent que les déclarations, c'est à dire que les morceaux de code et de membres de classe doivent être mis dans un autre fichier, un fichier source.
Essai de simlpifier au maximum ton problème pour en faire un "demonstrateur". Ou/et copie ici la sortie erreur que te donne le compilateur.
Le C++ est différent du Java, il faut penser autrement.
En C++ les fichiers sont séparé, il y a plusieurs compilation.
Les règles pour les fichiers .h c'est de mettre des balises de garde :
#ifdef _BALISE #define _BALISE ... // ton code #endifdans chaque fichier .h avec bien entendu un nom différent pous _BALISE.
Ensuite, il faut que les .h ne contiennent que les déclarations, c'est à dire que les morceaux de code et de membres de classe doivent être mis dans un autre fichier, un fichier source.
Essai de simlpifier au maximum ton problème pour en faire un "demonstrateur". Ou/et copie ici la sortie erreur que te donne le compilateur.
Bonjour,
tout d'abord, merci de vos réponse. Cependant malgré vos conseil je n'ai pas réussi a faire fonctionner mon code. Voici un aperçu simplifier de du contenus de mes fichiers.
Le controelur:
le header:
la source
La fenetre:
le header:
la source:
Le main:
Les erreurs:
Voilà, cela est un peut indigeste, merci d'avance de vos réponses.
tout d'abord, merci de vos réponse. Cependant malgré vos conseil je n'ai pas réussi a faire fonctionner mon code. Voici un aperçu simplifier de du contenus de mes fichiers.
Le controelur:
le header:
#ifndef CONTROLEUR_H #define CONTROLEUR_H #include "fenetre.h" class controleur{ public: conroleur(); private: fenetre *fen; }; #endif
la source
#include "controleur.h" controleur::controleur(){ fen= new fenetre(&this); fen->show(); }
La fenetre:
le header:
#ifndef FENETRE_H #define FENETRE_H #include "controleur.h" class fenetre{ public: fenetre(controleur *control); private: controleur *control; //[...] la déclaration des différent item de ma fenetre }; #endif
la source:
#include "reservation.h" fenetre::fenetre(controleur *Control){ control=Control; //[...] tout le reste inutile}
Le main:
#include "controleur.h" int main(int argc, char *argv[]){ controleur control; return 0; }
Les erreurs:
expeted ")" befor "*" token //a la ligne de la déclaration du constructeur dans fenetre.h ISO C++ forbids declaration of 'controelur' whith no type //a la ligne "controelur *control" de fenetre.h expected ";" befor token "*"//à la même ligne
Voilà, cela est un peut indigeste, merci d'avance de vos réponses.
ok, je crois voir le problème, tu as des classes interdépendante, c'est à dire que A utilise B, mais B utilise A.
Dans ce cas là il faut faire une déclaration de classe vide :
Dans ce cas là il faut faire une déclaration de classe vide :
La fenetre: le header: #ifndef FENETRE_H #define FENETRE_H class controleur; class fenetre{ public: fenetre(controleur *control); private: controleur *control; //[...] la déclaration des différent item de ma fenetre }; #endifJ'espère qu'il n'y a pas autant de fautes de frappe dans ton vrai code.