Bonjour,
Je suis entrain de coder un programme ou j'utilise 2 types de données, les entiers et les flottants. Je definit ces 2 types en utilisant des templates car suivant le cas je vais avoir besoin de differents types entiers (int, gmp) et differents types flottants (double, dpe, mpfr). Donc j'ai 2 classes (j'ai zappé les methodes non relevantes):
type_int.h
et
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
16 #ifndef Type_int_H #define Type_int_H #include "files.h" //(les headers bateaux genre iostream, std...) using namespace std; template<class F> class Type_float; template<class Z> class Type_int{ /*...*/ public: /*...*/ template<class F> Type_int<Z> & operator=(const Type_float<F>& s); }; #include "type_int.cpp" #endif
type_float.h
J'ai besoin d'un truc qui me permet de passer de l'un a l'autre, d'ou dépendance croisée entre les 2. j'ai donc mis type_int 'en premier', avec une forward declaration de Type_float pour qu'il me jette pas. type_float.cpp et type_int.cpp incluent tous les 2 les 2 .h, et la méthode qui m'interresse est codée de la meme manière dans les 2. Mais si tout ce passe bien pour Type_float, si je tente de specialiser le '=' de Type_int de la maniere suivante :
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
16 #ifndef Type_float_H #define Type_float_H #include "files.h" //(les headers bateaux genre iostream, std...) #include "type_int.h" using namespace std; template<class F> class Type_float { /*...*/ public: /* */ template<class Z> Type_float<F> & operator=(const Type_int<Z>& s); }; #include "type_float.cpp" #endif
Je me fait jeter par le compilo :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<> template<> inline Type_int<double>& Type_int<double>::operator=(const Type_float<double>& s) { data= s.GetData(); return *this; }
Je compile avec g++.real (GCC) 4.1.2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 g++ -c type_int.cpp -o type_int.o -ansi - pedantic -Wall g++ -c type_float.cpp -o type_float.o -ansi -pedantic -Wall type_int.cpp: In member function 'Type_int<Z>& Type_int<Z>::operator=(const Type_float<F>&) [with F = double, Z = double]' : type_int.cpp:179: erreur: invalid use of undefined type 'const struct Type_float<double>' type_int.h:9: erreur: declaration of 'const struct Type_float<double>'
ça fait des heures que je suis dessus, donc si quelqu'un qui s'y connait mieux que moi a une idée, je suis preneur.
Merci d'avance
Partager