le CPP
template<class T>A<T>::A()
{
cout<< contructeur<<endl;
}
template <class T>A<T>::~A()
{
// bla bla
}
template<class T> void A<T>::f()
{
// bla
}
et sur un autre fichier Main.cpp je fais
class B{};
#pragma argsused
int main(int argc, char* argv[])
{
A *p =new <B>A(); ou cela mais cela plante A *p =new A<B>();
p->f();
delete p;
return 0;
}
les erreur sont
[C++ Erreur] Main.cpp(12): E2102 Impossible d'utiliser le modèle 'A<T>' sans
spécifier des paramètres de spécialisation
[C++ Erreur] Main.cpp(12): E2040 Déclaration terminée incorrectement
ou est mon erreur ?
comment apeeler cette classe
est t il possible de de tester le type de "class T" si oui comment ?
A<B> *p =new A<B>(); p-><B>f(); // erreur [C++ Erreur] Main.cpp(17): E2280 Identificateur de membre attendu delete p;
ou est mon erreur ?
p->f();
et je si je fais p->f();
voila les erreurs [Lieur Erreur] Unresolved external 'A<B>::~A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ Il faut définir le destructeur de A :
template <class T> A::~A() {} ou alors ne pas le déclarer dans la classe
[Lieur Erreur] Unresolved external 'A<B>::A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ Idem. Il faut définir ton constructeur (lui donner un code, quoi)
[Lieur Erreur] Unresolved external 'A<B>::f()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ Encore idem.
dur dur les templates Mais non. Pas tant que cela.
Pour faire un template le plus simple c'est que tu fasses une classe "normale" en utilisant des types T qui -dans un premier temps- peuvent être de simples typedef, tu essaies, et après tu enlève ton typedef et tu fous des template <class T> un peu partout ;-)
peut tu me repondre pour cette solution ?
mercie encore
-- Cordialement , Sarda Olivier
Site Web: http://membres.lycos.fr/osarda
template <class T>
class A{
public:
A();
~A();
void f();
};
code dans le Main()
A<B> *p =new A<B>();
p-><B>f(); // erreur [C++ Erreur] Main.cpp(17): E2280 Identificateur de
membre attendu
delete p;
ou est mon erreur ?
p->f();
et je si je fais
p->f();
voila les erreurs
[Lieur Erreur] Unresolved external 'A<B>::~A<B>()' referenced from
E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
Il faut définir le destructeur de A :
template <class T> A::~A() {}
ou alors ne pas le déclarer dans la classe
[Lieur Erreur] Unresolved external 'A<B>::A<B>()' referenced from
E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
Idem. Il faut définir ton constructeur (lui donner un code, quoi)
[Lieur Erreur] Unresolved external 'A<B>::f()' referenced from
E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
Encore idem.
dur dur les templates
Mais non. Pas tant que cela.
Pour faire un template le plus simple c'est que tu fasses une classe
"normale" en utilisant des types T qui -dans un premier temps- peuvent être
de simples typedef, tu essaies, et après tu enlève ton typedef et tu fous
des template <class T> un peu partout ;-)
A<B> *p =new A<B>(); p-><B>f(); // erreur [C++ Erreur] Main.cpp(17): E2280 Identificateur de membre attendu delete p;
ou est mon erreur ?
p->f();
et je si je fais p->f();
voila les erreurs [Lieur Erreur] Unresolved external 'A<B>::~A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ Il faut définir le destructeur de A :
template <class T> A::~A() {} ou alors ne pas le déclarer dans la classe
[Lieur Erreur] Unresolved external 'A<B>::A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ Idem. Il faut définir ton constructeur (lui donner un code, quoi)
[Lieur Erreur] Unresolved external 'A<B>::f()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ Encore idem.
dur dur les templates Mais non. Pas tant que cela.
Pour faire un template le plus simple c'est que tu fasses une classe "normale" en utilisant des types T qui -dans un premier temps- peuvent être de simples typedef, tu essaies, et après tu enlève ton typedef et tu fous des template <class T> un peu partout ;-)
peut tu me repondre pour cette solution ?
mercie encore
-- Cordialement , Sarda Olivier
Site Web: http://membres.lycos.fr/osarda
Christophe Lephay
Olivier wrote:
template <class T>
class A{ public: A(); ~A(); void f(); };
code dans le Main()
A<B> *p =new A<B>(); p-><B>f(); // erreur [C++ Erreur] Main.cpp(17): E2280 Identificateur de membre attendu delete p;
ou est mon erreur ?
et je si je fais p->f();
voila les erreurs [Lieur Erreur] Unresolved external 'A<B>::~A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ [Lieur Erreur] Unresolved external 'A<B>::A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ [Lieur Erreur] Unresolved external 'A<B>::f()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
dur dur les templates
La bonne syntaxe est p->f();
Les erreurs que tu obtiens sont liées à une spécificité des templates : il faut aussi que le fichier de définition soit inclu au point d'instanciation. En d'autres termes, il faut inclure A.cpp et pas seulement A.h avant ton main() (ou quelque soient leurs noms)...
Chris
Olivier wrote:
template <class T>
class A{
public:
A();
~A();
void f();
};
code dans le Main()
A<B> *p =new A<B>();
p-><B>f(); // erreur [C++ Erreur] Main.cpp(17): E2280 Identificateur
de membre attendu
delete p;
ou est mon erreur ?
et je si je fais
p->f();
voila les erreurs
[Lieur Erreur] Unresolved external 'A<B>::~A<B>()' referenced from
E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
[Lieur Erreur] Unresolved external 'A<B>::A<B>()' referenced from
E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
[Lieur Erreur] Unresolved external 'A<B>::f()' referenced from
E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
dur dur les templates
La bonne syntaxe est p->f();
Les erreurs que tu obtiens sont liées à une spécificité des templates : il
faut aussi que le fichier de définition soit inclu au point d'instanciation.
En d'autres termes, il faut inclure A.cpp et pas seulement A.h avant ton
main() (ou quelque soient leurs noms)...
A<B> *p =new A<B>(); p-><B>f(); // erreur [C++ Erreur] Main.cpp(17): E2280 Identificateur de membre attendu delete p;
ou est mon erreur ?
et je si je fais p->f();
voila les erreurs [Lieur Erreur] Unresolved external 'A<B>::~A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ [Lieur Erreur] Unresolved external 'A<B>::A<B>()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ [Lieur Erreur] Unresolved external 'A<B>::f()' referenced from E:OLIVEPROJETSCPPBCB6TESTTESTTERMPLATESMAIN.OBJ
dur dur les templates
La bonne syntaxe est p->f();
Les erreurs que tu obtiens sont liées à une spécificité des templates : il faut aussi que le fichier de définition soit inclu au point d'instanciation. En d'autres termes, il faut inclure A.cpp et pas seulement A.h avant ton main() (ou quelque soient leurs noms)...