Comment créer une instance d'un templates [Résolu]

Signaler
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008
-
Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
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

Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010

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
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

"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é !!!
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

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
Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010

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