Problème de classe "template"
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
Code:
1 2 3 4 5 6 7
|
template<class T>
class TOTO {
...
//fonction membre
fonctiontoto();
} |
TITI.h
Code:
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();
} |
TOTO.cpp
Code:
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);
...
} |
TITI.cpp
Code:
1 2 3 4 5 6 7 8
|
#include <TITI.h>
template <class T> ...
TITI<T>::fonctiontiti()
{
...
} |
Comme je le disais, j'essaye de déplacer la définition de la fonction fonctiontoto() directement après la classe dans TOTO.h
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 ;)