IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Organisation des en-têtes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut Organisation des en-têtes
    Je sais qu'il y a déjà pas mal de discussions sur ce sujet, mais aucune ne répond réellement à la question que je me pose... Donc la voici : pour mon projet de GUI en SDL (qui sera une bibliothèque dynamique), j'ai organisé mon code avec un fichier cpp et un fichier hpp par classe (jusqu'ici tout va bien).

    J'ai créé un fichier "define.hpp" qui contiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #ifndef DEFINE_H
    #define DEFINE_H
     
    #include <iostream>
    #include <vector>
    #include <map>
    #include <list>
     
    #include "SDL.h"
    #include "SDL_ttf.h"
     
    namespace MON_NAMESPACE
    {
        class A;
        class B;
        class C;
    ...
    }
     
    #include "a.hpp"
    #include "b.hpp"
    #include "c.hpp"
    ...
     
    #endif // DEFINE_H
    Dans mes fichiers de déclaration des classes, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef DEFINE_H
    #include "define.hpp"
    #endif // DEFINE_H
     
    #ifndef A_H
    #define A_H
     
    namespace MON_NAMESPACE
    {
     
    class A
    {
    ...
    };
     
    }
     
    #endif // A_H
    Et dans mes fichiers cpp, j'ai un #include "a.hpp".
    L'intérêt que je trouve à cette organisation, c'est que ça me semble plus simple à gérer, que mes fichiers .hpp sont plus clairs.En plus, comme je fais une librairie dynamique, ceux qui utilisent ma librairie peuvent se contenter d'inclure mon fichier define.hpp... (mais bon, je pourrais conserver ce fichier en gérant différemment mes en-têtes...)

    Je sais déjà que cette façon de travailler est la pire qui existe pour le temps de compilation. Mais bon, ça ne me gène pas trop (du moins pour l'instant)

    Est-ce qu'il y a d'autres inconvénients à organiser ses en-têtes de la sorte ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ben pour commencer, tu as une inclusion croisée, ici...
    À ta place, je n'inclurais pas les headers A,B,C dans define.hpp
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par Médinoc
    Ben pour commencer, tu as une inclusion croisée, ici...
    À ta place, je n'inclurais pas les headers A,B,C dans define.hpp
    Ben je la gère avec les #ifndef... non ? (en tous cas ça compile et ça fonctionne )
    En fait, quand on inclus "a.hpp", ça commence par inclure "define.hpp" et dans "define.hpp", ça me déclare toutes mes classes (y compris "a.hpp"). Si on continue à dérouler "a.hpp", on arrive à "#ifndef A_H", qui est déjà défini. Don la classe A n'est déclarée qu'une fois.

    Si je n'inclus pas les headers A, B, C dans "define.hpp", ce fichier ne suffira pas pour utiliser ma bibliothèque, et si j'utilise une fonction de B dans "a.cpp", elle ne sera pas déclarée, si ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    En ce cas, n'utilise pas define.hpp pour utiliser ta bibliothèque.
    Utilise un header bibliotheque.hpp qui les inclut tous.

    Et dans tes sources de bibliothèque, n'inclus que les headers dont tu as besoin.
    Si tu veux utiliser des fonctions de B dans a.cpp, inclus b.hpp dans a.cpp, pas dans les headers.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] - Organisation des pages pour une requete.
    Par ShinJava dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 24/10/2005, 15h33
  2. [GUI]Organisation des classes
    Par c-top dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 04/03/2005, 17h46
  3. Organisation des classes
    Par R3iTt0R dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2004, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo