On écrit pas une classe paramétrable lors de l'écriture du constructeur. Ca se fait lors de l'écriture de la classe. Ex :
template<class T> class List {
};
et dedans, tu utilise le type T comme un nouveau type ; en aucun cas, tu réutilises template<class [B]T[/B]>.
Dans le .h je n'avais déclaré template<class T> qu'au début comme tu l'a marqué ds #1 donc l'erreur ne venait pas de là
J'avais déclarer comme suit (aprés coup c'était plus logique) :
template<class T> Liste<T>::Liste (...) { .... }
dans le .cpp
Mais l'erreur est la même , j'ai même changé le nom en Liste pour pas chambouler avec la STL au cas où.
Bon pour étre précis mon code ça donne ça
// liste.h
template<class T>
class Liste
{
public:
Liste();
~Liste();
}
// liste.cpp
template<class T>
Liste<T>::Liste()
{ ... }
template<class T>
Liste<T>::~Liste()
{ ... }
//main.c
int main()
{
Liste<int> L;
}
et l'erreur est toujours la même
Kevin > Ben mince , je croyais que tu avais trouvé l'erreur , Hé non : c'est une faute de ma part , c'est bien un main.cpp que j'ai et non main.c
Tiens voilà: le problème est que tu ne peux apparemment pas définir des fonctions template dans un fichier source compilé séparément (parce que ni MSVC++, ni g++ n'implémentent le mot-clé export). Met tes fonctions dans ton header et ça marche.
Je commence a aprendre les template en C++ et mon a ma dit: On met les fonctions DANS LE POINT H, avec la définition de la classe.
// MaCLasse.h
template <class T>
class MaClasse
{
....
};
template <class T>
MaClasse<T>::Fonction1(...)
{
....
}
// MonMain.cpp
#include "MaClasse.h"
...
MaCLasse<type> ClasseA;
...
sous MSVC
on met la def de la clase dans le .h
dans le .h, on inclut le .cpp qui contieznt les fonctions
et on ne met pas le .cpp dans le projet, sinon il foire à la compilation (ou link, je sias plus)
ça marche... il y a peut-être autre technique (celle-ci correspond en gros à tout mettre dans le .h)
Kevin> clair que ça me parait pas joli comme méthode...
mais c'est comme ça qu'on m'a appris à faire
À ta place, j'appellerais ce fichier un fichier .h. Ce n'est pas idéal non plus parce qu'il y a des fonctions dedans, mais c'est techniquement plus correct. Quant à la solution idéale, si j'ai bien compris, ça serait le mot-clé export. Mais hélas, ni MSVC++, ni g++ ne comprennent ce mot-clé pour l'instant. (Il est difficilement implémentable.)