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
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
et

type_float.h
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
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
 
template<> template<> inline Type_int<double>& Type_int<double>::operator=(const Type_float<double>& s)
{
    data= s.GetData();
    return *this;
}
Je me fait jeter par le compilo :

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>'
Je compile avec g++.real (GCC) 4.1.2.

ç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