neodelphi
Messages postés442Date d'inscriptionjeudi 4 avril 2002StatutMembreDernière intervention11 août 2008
-
11 juin 2005 à 11:49
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDerniè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]()
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDerniè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
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 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é !!!
neodelphi
Messages postés442Date d'inscriptionjeudi 4 avril 2002StatutMembreDernière intervention11 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...
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDerniè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...