Bonjour,
J'ai toujours utilisé les fichiers .h pour déclarer mes classes C++ et les fichiers .cpp pour le code source. Pour les classes qui utilisent les templates et les méthodes inlines: où faut-il mettre le code source ? :
- Dans les fichiers .cpp: ça ne fonctionne pas
- Dans les fichiers .h: on n'y met que de la déclaration, pas du code source
J'ai parfois vu ceci:
classA.h:
classA.inl:
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 #ifndef CLASS_A_H #define CLASS_A_H #include <vector> //ici, tous les autres include template<class T> class classA { public: classA(); }; #include "classA.inl" #endif
Ca fonctionne bien et ça me semble assez logique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 template<class T> inline classA<T>::classA() { //du code source ici }
Mon problème:
J'ai deux classes: A et B qui sont toutes les deux des templates. La classe A à besoin de la class B, j'ajoute donc un '#include "B.h"' dans le fichier 'A.h'.
Jusque là pas problème. Maintenant imaginons que la classe B à aussi besoin de la classe A: je ne peux pas ajouter un '#include "A.h"' (include cyclique).
Comment faire ?
Info: la solution proposé ici ne fonctionne pas pour la classe template/inline: http://cpp.developpez.com/faq/cpp/?p...erence_croisee
Merci d'avance
Partager