Bonjour,
Je viens vers vous aujourd'hui car j'ai un soucis dans un code source que je viens de récupérer. Celui-ci utilise des classes "template" dont les fonctions membres sont prototypées dans les classes mais définies dans des .cpp et non dans les .h eux-même.
Du coup, j'ai des erreurs de compilation me disant que mes fonctions membres ne sont pas définies, ce qui me parait plutot normal.
J'ai donc voulu déplacer les fonctions des .cpp dans les .h, directement à la suite de la classe. Pour la plupart de mes fonctions, ça marche très bien. Les erreurs relatives à ces fonctions sont d'ailleurs bien supprimées.
Mon problème vient d'une dernière fonction membre, un peu spéciale.
Dans mon exemple, je la nommerais fonctiontoto(). Elle fait parti de la classe TOTO (actuellement située dans TOTO.H) et est définie dans TOTO.cpp.
J'introduis aussi la classe TITI, située dans TITI.h et dont les fonctions membres sont définies dans TITI.cpp
//TOTO.h
TITI.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 template<class T> class TOTO { ... //fonction membre fonctiontoto(); }
TOTO.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <TOTO.h> //nécessaire car besoin de la classe TOTO template<class T> class TITI { //plein de choses fonction de la classe TOTO //exemple: private: TOTO<T>* _pvariable ... //fonction membre fonctiontiti(); }
TITI.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <TOTO.h> #include <TITI.h> //necessaire car utilisation de la classe TITI //dans la def de la fonction fonctiontoto() //membre de la classe TOTO template <class T> TOTO<T>& TOTO<T>::fonctiontoto() { ... TITI<T> next((TOTO<T>&)s); ... }
Comme je le disais, j'essaye de déplacer la définition de la fonction fonctiontoto() directement après la classe dans TOTO.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <TITI.h> template <class T> ... TITI<T>::fonctiontiti() { ... }
Cependant, lorsque je fais ceci, il me signale que, dans TOTO.h, TITI est inconnue. (Ce qui me parait normal...) J'ai donc insérer un #include TITI.h juste entre la classe et la fonction pour qu'il reconnaisse l'utilisation de la classe TITI dans la fonction membre fonctiontoto(). (J'ai aussi essayer de placer le include en début du fichier.h). Mais rien y fait, TITI est toujours inconnu.
J'ai un peu peur que le problème vienne du fait que TOTO doit connaitre TITI, MAIS que TITI dois aussi connaitre TOTO (puisqu'il y a du "TOTO" dans la definition de la classe TITI). Je ne vois pas trop ce que ca pourrait etre d'autre...
D'ailleurs, si je commente la ligne où apparait TITI dans la fonction fonctiontoto(), tout roule. C'est donc là le problème...
Quelqu'un aurait il une solution?
Merci d'avance
Partager