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.
Partager