Template- au secours

toddy_101 Messages postés 91 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 7 août 2006 - 21 mai 2005 à 19:00
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 22 mai 2005 à 14:05
bonjour tout le monde,

j'ai un probleme au niveau des templates, ca bloke au niveau du linkage!!

voici la declaration de la classe , et des methodes:



template <class t> class pile

{

public:

pile();

int pilevide();

void empiler(t);

t depiler();

void afficher();

/~pile();



private:

struct liste_pile

{

liste_pile *next;

t val;

};

liste_pile *sommet;

};



template <class t> pile <t>::pile()

{

sommet=NULL;

};

template <class t>

pile <t>::pilevide()

{

return sommet==NULL;

}

template <class t>

void pile <t>::empiler(t elt)

{

liste_pile *p;



p = new liste_pile();

p->val=elt;

p->next=sommet;

sommet=p;

}

template <class t>

t pile <t>::depiler()

{

liste_pile *p;

t elt;



t=sommet->val;

p=sommet;

sommet=sommet-Wnext;

delete p;

}

template <class t>

void pile <t>::afficher()

{

while(!pilevide())

cout<<depiler();

}





au niveau du main:



pile p;





merci bcp

5 réponses

bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
21 mai 2005 à 21:17
Et que repond le linker? Tu inclue bien TOUTES les definitions avant ton main?


mayonaise tournera, bientôt, très bientôt...
0
toddy_101 Messages postés 91 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 7 août 2006
21 mai 2005 à 22:29
est c ke j'ai besoin d'inclure une definition pour les templates ? si oui laquelle?

mersi
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
21 mai 2005 à 23:34
Et bien toutes celles que tu utilises en fait. Il n'y a pas à ma connaissance de codage en dur des templates, il faut inclure toute les definitions lors de la compilation. Le mieux c'est de developper les membres de la classe directement dans celle-ci.

template <class t> class pile
{
public:
pile() {
//...
}
int pilevide() {
//...
}
void empiler(t) {
//...
}
t depiler() {
//...
}
void afficher() {
//...
}
~pile(){
//...
}

//...
};


mayonaise tournera, bientôt, très bientôt...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
22 mai 2005 à 09:54
Compare avec ce que je te mets la, il y avait plusieurs truc qui allaient pas, dont des erreurs de frappe.



template <class t> class pile

{

public:

pile();

int pilevide();

void empiler(t);

t depiler();

void afficher();

~pile() { delete this->sommet; }



private:

struct liste_pile

{

liste_pile *next;

t val;



~liste_pile() { delete this->next; }

};

liste_pile *sommet;

};



template <class t> pile <t>::pile()

{

sommet=NULL;

};

template <class t>

int pile <t>::pilevide()

{

return sommet==NULL;

}

template <class t>

void pile <t>::empiler(t elt)

{

liste_pile *p;



p = new liste_pile();

p->val=elt;

p->next=sommet;

sommet=p;

}

template <class t>

t pile <t>::depiler()

{

liste_pile *p;

t elt;



elt=sommet->val;

p=sommet;

sommet=sommet-sommet->next;

delete p;

}

template <class t>

void pile <t>::afficher()

{

while(!pilevide())

std::cout<<depiler()<<std::flush;

}
0

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

Posez votre question
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
22 mai 2005 à 14:05
Il manque le corps d'assignation (la classe est fuie), des const, et
afficher() vide la pile (il vaut mieux faire une surcharge de <<
sur ostream).
0
Rejoignez-nous