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 :

Problème d'inclusions fichier inl


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut Problème d'inclusions fichier inl
    Bonsoir ,

    J'ai actuellement un petit problème, si quelqu'un aurait la solution je lui serait très reconnaissant. Pour faire simple, j'ai trois classes templates, donc je définit les fonctions dans un fichier inl, il y a donc en tout 6 fichiers, qui sont placés dans un dossier, que je vais nommer Sousdossier. Voici l'ordre des choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Sousdossier/A.hpp
     
    template <typename T>
    class A
    {
    // Fonctions
    };
     
    #include "Sousdossier/A.inl"
     
    // Fonctions non-membres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Sousdossier/A.inl
     
    // Définitions des fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Sousdossier/B.hpp
     
    #include "Sousdossier/A.hpp" // B utilise A
     
    template <typename T>
    class B
    {
    // Fonctions
    };
     
    #include "Sousdossier/B.inl"
     
    // Fonctions non membres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Sousdossier/B.inl
     
    // Définition des fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Sousdossier/C.hpp
     
    #include "Sousdossier/B.hpp" // Inclu donc aussi Sousdossier/A.hpp
     
    template <typename T>
    class C
    {
    // Fonctions
    };
     
    #include "Sousdossier/C.inl"
     
    // Fonctions non membres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Sousdossier/C.inl
     
    // Définition des fonctions

    Jusque ici, tout fonctionne bien, je peux utiliser n'importe laquelle des trois classes sans soucis. Maintenant, j'ai une autre classe, qui utilise la classe A, mais cette nouvelle classe n'est pas un modèle, j'ai donc un fichier hpp et un fichier cpp.

    Or, dès que j'inclu le fichier de A :

    #include "Sousdossier/A.hpp"

    Le compilateur me sort une erreur "Impossible d'ouvrir le fichier d'include, no such file or directory." Pourtant le fichier existe bien, puisqu'il ne me sort pas d'erreur quand je fais #include "Sousdossier/A.hpp" dans "Sousdossier/B.hpp". Je précise que cette nouvelle classe se trouve aussi dans le dossier Sousdossier (soit "Sousdossier/D.hpp", sauf que cette classe dispose d'un fichier d'implémentation cpp.)

    La seule solution que j'ai, c'est de supprimer le Sousdossier dans la classe D, ainsi :

    // Sousdossier/D.hpp

    #include "A.hpp";

    A ce moment là, le compilo râle encore et va cette fois-ci dans le fichier "Sousdossier/A.hpp" pour me dire : "Impossible d'ouvrir le fichier d'include, no such file or directory", à propos de "Sousdossier/A.inl" (bref, le fichier d'implémentation de A qui fonctionnait très bien avant). La seule solution, supprimer le "Sousdossier" dans le fichier "Sousdossier/A.hpp".

    Et là, ça marche. Seulement, c'est un peu génant, car maintneant, on ne sait plus que le fichier A.inl est dans le dossier "Sousdossier".

    J'espère que j'ai été assez clair .

  2. #2
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Citation Envoyé par Bakura Voir le message
    J'espère que j'ai été assez clair .
    Erf

    On reprends :

    Arborescence :

    dossier bidule:
    dossier sousdossier
    D.hpp
    A.hpp
    B.hpp
    C.hpp
    A.inl
    B.inl
    C.inl
    D.cpp
    Si on est d'accord avec ça, sache que tous tes includes, dans tes bouts de codes, sont faux.

    Les includes sont soit en relatif par rapport au fichier courant, soit en absolu via le path.

    Donc, si D.hpp a besoin de A.hpp, c'est #include "A.hpp", puisqu'ils sont dans le même répertoire.
    Idem pour A.inl dans A.hpp, et ainsi de suite.

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Ah ok... Donc puisque tous les fichiers se trouvent dans le même sous dossier, je dois donc enlever le "Sousdossier"... merci !

  4. #4
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Je rencontre de nouveau un problème. Ca devient assez énervant ! Bon j'ai supprimer le "Sousdossier/" pour chaque fichier étant directemetn dans le sous-dossier.

    Maintenant, je dispose d'un autre sous-dossier, que je vais appeler "Sousdossier2", où se trouve d'autres classes, dont une qui s'appelle Camera. Elle utilise la classe B et A, dont les fichiers sont contenus dans le premier Sousdossier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Sousdossier2/Camera.hpp
    #include "Sousdossier/B.hpp" // Inclu aussi A.hpp
     
    class Camera
    {
    private:
       B objetB;
     
    public:
       Camera ();
    };
    Pas de soucis jusque ici, tout fonctionne. Si je définie le constructeur à l'intérieur de la classe, pas de soucis non plus. Ca se corse lorsque je souhaite insérer les définitions des fonctions dans un fichier source cpp (ce n'est pas une classe template) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Sousdossier2/Camera.cpp
    #include "Camera.hpp"
     
    Camera::Camera ()
    {
       // CA PLANTE !!
    }
    fatal error C1083: Cannot open include file: 'Sousdossier/B.hpp': No such file or directory

    Alors qu'il parvient très bien à l'ouvrir si je laisse le cpp vide . De plus en plus étrange...

  5. #5
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Sousdossier2/Camera.hpp
    #include "Sousdossier/B.hpp" // Inclu aussi A.hpp
    Pour passer de sousdossier/ a sousdossier2/, tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "../Sousdossier/b.hpp"
    (tu remonte d'un cran dans l'arborescence, puis tu repasse dans le dossier que tu cherche).

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Kujara Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Sousdossier2/Camera.hpp
    #include "Sousdossier/B.hpp" // Inclu aussi A.hpp
    Pour passer de sousdossier/ a sousdossier2/, tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "../Sousdossier/b.hpp"
    (tu remonte d'un cran dans l'arborescence, puis tu repasse dans le dossier que tu cherche).
    bonjour,
    c'est pas juste au compilot qu'il faut dire ou sont les include??

Discussions similaires

  1. [Smarty] Problème d'inclusion de fichier .tpl
    Par Dev-master dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/08/2008, 16h40
  2. Réponses: 4
    Dernier message: 31/03/2008, 14h07
  3. Problème d'inclusion de fichiers
    Par _Michel dans le forum C
    Réponses: 1
    Dernier message: 15/03/2008, 17h18
  4. Problème d'inclusion de fichiers
    Par VenusX117 dans le forum C
    Réponses: 8
    Dernier message: 22/10/2006, 11h58
  5. Problème d'inclusion de fichiers
    Par navis84 dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2006, 14h24

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