Template, pile et affichage !

seven333 Messages postés 4 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 26 novembre 2005 - 26 nov. 2005 à 18:27
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 26 nov. 2005 à 21:01
voici mon fichier de déclaration

#include

#include <stdlib.h>





template <class T> class Pile

{

int n_elem;

int *adresse;

int nb_element_courant;



public :



Pile(int n); // constructeur I

Pile(Pile &); // constructeur de recopie III

~Pile(); // destructeur



//Opérateurs unaires

int operator ++();

int operator --();



//Opérateurs binaires

Pile & operator =(Pile &); // opérateur d'affectation (=)

Pile & operator << (T t);

Pile & operator >> (T &t);



friend ostream& operator << (ostream &,Pile<T> &);

};



mon fichier de définition



....



template <class T> ostream& operator << (ostream &io,Pile<T> &p)

{

io << "<* ";

for(int i=p.nb_element_courant;i>=0;i--)

io << p.adresse[i] << " ";

io << " *>";

return io;

}



et mon main

#include "definition.h"



int main()

{

Pile pile(5);



pile << 3 << 4 << 1;



cout <<"la pile : "< qui raconte

undefined reference to 'operator << (std: ostream&,Pile)



Merci d'avance pour toute vos idées ;) !

5 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
26 nov. 2005 à 18:36
Deja, les fichiers include, c'est pas ca:

#include

#include <stdlib.h>



mais ca:

#include

#include <cstdlib>

using namespace std;


Sinon essai de déclarer ta fonction comme ca:

friend template <class U> ostream& operator << (ostream &,Pile &);
0
seven333 Messages postés 4 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 19:20
Merci pour ton idée, j'ai donc changé l'en tête du fichier et modifié
la déclaration mais ça ne fonctionne toujours pas car du coup il ne
reconnait plus le mot clé friend !



J'ai donc conservé que ta première idée, mais toujours le pb de linkage !
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
26 nov. 2005 à 20:25
En fait, faut mettre :

template <class U> friend ostream& operator << (ostream &,Pile &);
0
seven333 Messages postés 4 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 20:50
Alors j'ai essayé ta déclaration, il n'y a pas d'erreur de linkge mais une erreur de compilation que je n'ai pas encore vu !



Dans mon fichier déclaration, au moment de template <class T>
class Pile, il m'indique "declaration of 'class T' et au niveau de la
déclaration de la fonction amie, il me met "shadows template parm
'class t'". Je suis vraiment désolée d'insister mais je ne m'en sors
pas avec ces templates !
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
26 nov. 2005 à 21:01
J'ai aucune erreur avec ca:

Pile & operator >> (T &t);



template
<class U> friend ostream& operator << (ostream
&,Pile &);

};





template <class U> ostream& operator << (ostream &io,Pile &p)

{

io << "<* ";

for(int i=p.nb_element_courant;i>=0;i--)

io << p.adresse[i] << " ";

io << " *>";

return io;

}
0
Rejoignez-nous