Forum Programmation.c++ Templates

Posté par  .
Étiquettes : aucune
0
12
déc.
2004
Bonjour!

J'essaie d'utiliser les templates mais ça coince...

Mon fichier templates.h :

#include

#include

using namespace std;

template <class T>
class TVecteur
{
private:
int nbElem;
T * data;
public:
TVecteur(int n){ nbElem=n; data=new T[n];}
void affichage();
};


*******************************************

Templates.cxx

#include "templates.h"

template <class T>
void TVecteur::affichage()
{
cout << nbElem << endl;
}

*******************************************

Et mon main.cxx

#include "templates.h"

int main()
{
TVecteur vi(5);
vi.affichage();
return 0;
}

*******************************************

Mais il ne veut pas compiler :

[antho@localhost templates]$ g++ -o test main.cxx templates.cxx
/tmp/cc3jAgwQ.o(.text+0x31): In function `main':
: référence indéfinie vers « TVecteur::affichage() »
collect2: ld a retourné 1 code d'état d'exécution


D'où ma question, comment définir la fonction affichage en dehors de la classe?
J'avais le même problème avec le constructeur, je l'ai défini dans la classe et la plus de problèmes...
Je travaille sous Red Hat 9
Merci d'avance pour votre aitde!
  • # Perdu

    Posté par  (site web personnel) . Évalué à 2.

    Effectivement, tu ne peux pas mettre l'implementation du template dans le .cpp. Pour pouvoir le faire, il faudrait que le compilateur implemente le mot cle export, ce qui n'est aujourd'hui le cas d'aucun des compilateurs C++ les plus utilisés (GCC, VC++, Borland, ...).

    Par contre, tu peux toujours te faire un fichier .tpp ou quelque chose comme ça, que tu incluera dans ton .h. Ca rend les choses plus claires mais ca ne compilera pas plus vite.
  • # Ça risque de ne pas être possible.

    Posté par  . Évalué à 1.

    Salut,
    Tu peux regarder le fichier list dans la STL.
    /usr/lib/gcc-lib/<...>/3.4.1/include/g++-v3/list
    qui inclue /usr/lib/gcc-lib/<...>/3.4.1/include/g++-v3/bits/list.tcc.
    Pour bien générer le code avec les offsets idoines, le compilo a besoin
    et de T et de ton code paramétré par T.
    Hth.
  • # RE

    Posté par  . Évalué à 1.

    Merci pour les réponses.
    J'ai trouvé une astuce : http://c.developpez.com/faq/cpp/?page=templates#DIVERS_templates(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.