Template et l'héritage

cs_imad_lol Messages postés 90 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 mai 2008 - 5 mai 2007 à 14:57
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 - 29 déc. 2008 à 10:15
salut.
dans mon programme je déclare 2 classe X et Y.les 2 classe sont des classes templates et Y hérite de X :

template <class typ>
class X
{
 
};
//**************************************
template < class typ >
class Y : public X <typ>
 {
 public:
  Y();
  void afficher();
  };
//**************************************
quand je declare une instance de type Y le compilateur accepte la declaration,mais il n'accepte pas l'appel de la fonction "afficher()",et il m'affcihe l'erreur :
 "error C2228: left of '.x' must have class/struct/union type"

merci d'avance

6 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 mai 2007 à 16:30
Et comment déclares tu l'instance Y ?
Sinon essai en enlevant l'espace entre X et <type>.
0
cs_imad_lol Messages postés 90 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 mai 2008
5 mai 2007 à 18:39
voila comment je declare l'instance Y :

Y  p();
..................
p.Afficher();
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 mai 2007 à 18:58
Je pensais que la syntaxe était correct mais en fait, si ton constructeur ne prend pas d'argument. Faut pas mettre les "()".

Donc la déclaration donne:

Y p;
p.Afficher;
0
cs_imad_lol Messages postés 90 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 mai 2008
5 mai 2007 à 20:29
oui .mais lorsque j'enleve les parentheses il m'affiche 3 erreurs de compilation :

main.obj : error LNK2001: unresolved external symbol "public: void __thiscall pile::empiler(int)" (?empiler@?$pile@H@@QAEXH@Z)

main.obj : error LNK2001: unresolved external symbol "public: __thiscall pile::pile(void)" (??0?$pile@H@@QAE@XZ)

Debug/calculatrice.exe : fatal error LNK1120: 2 unresolved externals
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 mai 2007 à 21:15
Suivant le compilo que tu utilises, les templates sont plus ou moins chiant. Dans ton cas, faut pas mettre de code dans le fichier .cpp, tout doit etre en meme temps que la définition.
0
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
29 déc. 2008 à 10:15
Je ne connais aucun compilo qui accepte l'implémentation des templates dans un fichier cpp...  Ca existe ?
0
Rejoignez-nous