Comment créer une instance d'un templates

Résolu
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008 - 11 juin 2005 à 11:49
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010 - 11 juin 2005 à 17:11
Bonjour, je suis en train de découvrir les templates en c++ et j'ai
donc essayé de coder une classe CArray. Pour ce qui est des
déclarations il ne semble pas y avoir de problème, le compilateur ne me
cri pas dessus. J'ai donc ensuite tenté de créer une instance de ce
template, mais la, il y a un problème lors de l'édition de liens :





undefined reference to `CArray<CParticule>::CArray[in-charge]()




<hr size= "2" width="100%"> template <class T>

class CArray

{

private:

T *elements;

int elements_count;

public:

CArray(void);

};


<hr size ="2" width= "100%">CArray<CParticule> *pparticules;


<hr size="2" width="100%">pparticules = new CArray<CParticule>(); // C'est cette ligne qui ne passe pas !


<hr size ="2" width="100%">

J'ai essayé de ne pas
spécifié le type de template lors de la création, ou de remplacer
CParticule par int mais il y a toujours des erreurs.



Merci pour vos réponse et bonne journée



neodelphi

4 réponses

mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
11 juin 2005 à 12:48
le new est bon il fait appel au constructeur par défault. pour les templates es ce que tu fait une compilation séparé ?



J'ai eu le même probleme la compilation marche bien mais au linkage il
plante. le seul moyen que j'ai trouver et de compiler en incluant ton
template. je m'explique. tu déclare ton CArray<CParticule> dans
ton main.cpp et ta fonction est définis dans ton Array.cpp. Donc dans
ton main.cpp tu ajoute #include "Array.cpp".



c'est pas tres propre et il n y a pas de compilation séparé mais c'est la seul astuce que j'ai trouvé.



Ou alors mais tout ton code de la classe CArray dans le .h ce qui revient au même puisseque tu vas include le .h

Voili,Voilou
3
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
11 juin 2005 à 12:02
"pparticules = new CArray<CParticule>(); // C'est cette ligne qui ne passe pas !"

Je crois que ce qui est faux c'est les ( ), enleve les. (Je ne connais rien aux template mais je n'ai encore jamais vu un new faisant reference a une fonction et non a un type de donné)

Le travail c'est la santé, ne rien faire c'est la préservé !!!
0
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
11 juin 2005 à 14:59
En effet je fait une compilation séparée avec un makefile, mais il
n'est pas question de mettre mon code dans le meme fichier étant donner
que ce template va me servir pour plusieurs classes...

neodelphi
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
11 juin 2005 à 17:11
Ce que je veux dire c'est que tu doit include ton fichier .cpp dans ton
.h pour pour que l'instanciation de ta classe et son code soit dans la
même passe de compilaion. c'est a dire que le compilateur devra
compiler ta classe CArray pour chaque instanciation de type différent.
C'est la seul méthode que j'ai trouvé. il y en a surement d'autre car
les codes de base sont bien fait avec des templates.



Il y a peut être une histoire de compilateur aussi...

Voili,Voilou
0
Rejoignez-nous