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 Matthieu Moy (site web personnel) . Évalué à 2.
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 Sisyphe Plâtrier . Évalué à 1.
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 Mookie . Évalué à 1.
J'ai trouvé une astuce : http://c.developpez.com/faq/cpp/?page=templates#DIVERS_templates(...)
[^] # Re: RE
Posté par Guillaume Morin . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.