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 :

Regrouper des fichiers sous un même nom


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut Regrouper des fichiers sous un même nom
    Je voulais demander si il est possible de regrouper plusieurs fichiers avec un même nom ?

    Je m'explique, imaginons que l'on veut faire 30 objets différents et que l'on fait donc 30 classes différentes, et donc 30 fichiers .h différents, voir même 30 .cpp. Sommes-nous obligé, lorsqu'un autre fichier utilise ces objets, inclure les 30 fichiers comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "gem.h"
    #include "armure.h"
    #include "arme.h"
    #include "fruits.h"
    #include "beverage.h"
    #include "cloaks.h"
    ...
    Ne peut-on pas créer par exemple un fichier contenant tous ces include et en incluant ce fichier, on obtient tous les autres ?

    Merci de vos réponses.
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    On peut oui, mais c'est généralement pas une bonne idée car tu vas forcer l'inclusion de plein de fichiers dont tu n'as pas besoin, ce qui rallonge le temps de compilation.
    Tu peux te limiter à des forward declaration quand c'est possible:
    Un apperçu ici:
    http://c.developpez.com/faq/cpp/?pag...erence_croisee
    Ainsi tu diminues le nombre d'en-tête à inclure.
    Si vraiment tu as besoin de tout inclure, tu peux te tourner vers les en-têtes précompilées.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Merci, j'avais un problème la-dessus.

    Mais j'ai vu dans un livre que dès qu'on utilise des fonctions inline dans une classe ou des fonctions globales avec un .h et un .cpp, il fallait inclure le .h, alors est-ce que ça ve dire que si on crée une classe avec un .h et un .cpp mais qu'il n'y a pas de méthodes inline, il n'est pas besoin de l'inclure lorsqu'on l'utilise?
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Dès que tu utilises la classe, il faut inclure son .h. Par contre, si tu ne fait que manipuler des pointeurs / référence dessus, alors une déclaration anticipée fonctionne.
    Le but n'est pas de supprimer totalement l'inclusion des .h, mais de les supprimer depuis d'autres .h. Après il faut les mettre dans le .cpp évidement, mais seulement ceux dont tu as besoin.
    Exemple:
    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
     
    #ifndef EXEMPLE_H
    #define EXEMPLE_H
     
    #include "A.h" // class A
    #include "B.h" // class B
    #include "C.h" // class C
    #include "D.h" // class D
    #include "E.h" // class E
     
    class Exemple : public A
    {
    public:
        void Test( const B & );
        void Test( const C & );
        void Test( const D & );
        void Test( const E & );
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "exemple.h"
     
    void Test()
    {
        B b;
        Exemple e;
        e.Test( b );
    }
    là typiquement, tu n'as besoin d'inclure que "A.h" dans ce header car Exemple dérice de A. Le reste, des déclaration anticipée permettent d'économiser des inclusions, économie répercutée pour chaque inclusion de "exemple.h":

    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
     
    #ifndef EXEMPLE_H
    #define EXEMPLE_H
     
    #include "A.h" // class A
    class B;
    class C;
    class D;
    class E;
     
    class Exemple : public A
    {
    public:
        void Test( const B & );
        void Test( const C & );
        void Test( const D & );
        void Test( const E & );
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "exemple.h"
    #include "B.h"
     
    void Test()
    {
        B b;
        Exemple e;
        e.Test( b );
    }
    note l'inclusion de "B.h" dans le .cpp. Ce dernier doit inclure ce qu'il utilise.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Merci, ça sera toujours plus simple.

    Mais si j'ai bien compris, il n'est pas possible d'inclure plusieurs fichiers en une ligne ?
    Mes sites :
    - Portail : http://www.azharis.fr/
    - Neuroshima Hex : http://neuroshima-hex.azharis.fr/
    - Monolith Arena : http://monolith-arena.azharis.fr/

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    Un truc qui n'a rien à voir mais je préferais pas créer un thread pour ça, et c'est par rapport aux classes et fichiers.

    J'ai une classe qui contient beaucoup de methodes qui peuvent etre longues et j'aimerais répartir ça sur plusieurs fichiers, est-ce possible ? Pour le moment j'ai essayé plusieurs trucs et ça me rapporte des erreurs.

    Merci

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bien sûr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Truc.h
    ------
     
    #ifndef TRUC_H
    #define TRUC_H
     
    class Truc
    {
        void F1();
        void F2();
        void F3();
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Truc1.cpp
    ---------
     
    #include "Truc.h"
     
    void Truc::F1()
    {
        // ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Truc2.cpp
    ---------
     
    #include "Truc.h"
     
    void Truc::F2()
    {
        // ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Truc3.cpp
    ---------
     
    #include "Truc.h"
     
    void Truc::F3()
    {
        // ...
    }

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    Ok merci désolé j'avais trouvé en effet mais mes erreurs venaient juste qu'il manquait des inclusions pour des elements utilisés dans la class, et que quand j'incluais à partir des autres fichiers où il manquait cette inclusion (présente dans les autres fichiers où j'incluais) ben ça marchait pas.

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

Discussions similaires

  1. [XL-2010] Regroupement des fichiers excel selon un critère de nom
    Par nidale dans le forum Excel
    Réponses: 8
    Dernier message: 04/03/2015, 16h53
  2. Regrouper des fichiers XSD séparés dans un même fichier
    Par x-timas dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/05/2010, 15h36
  3. [Requête]Regrouper des champs d'un mème enregistrement
    Par jojo_perso dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/04/2007, 23h25
  4. Récupérer automatiquement des fichiers sous ftp
    Par Mourne dans le forum Windows
    Réponses: 1
    Dernier message: 03/01/2007, 13h21
  5. Comment déplacer des fichiers sous perl ?
    Par Ickou dans le forum Langage
    Réponses: 6
    Dernier message: 10/11/2005, 13h17

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