Template rendre friend un operator<<

Signaler
Messages postés
4
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
21 décembre 2006
-
Messages postés
4
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
21 décembre 2006
-
Hello world !!

Un petit merci a tout ce qui me lirons et peut etre un grand a celui qui me donne ma reponce.

Alors je vous mets dans le bain:
Je doit coder un patron de list doublement chainée (comme dans list.h)
pour cela j'ai:
- Un template<typename T> representant la liste elle memme
- Un template<typename T> representant un element de la liste

Ce dernier (l'element) contient une valeur de type T et 2 pointeurs sur les elements precedent et suivant.

On arrive dans le vif du sujet:
Etant donne que perssonne a part le template de liste n'a besoin de trifouiller dans mon template d'element je veux rendre celui-ci entierement privé et donc rendre friend le template de la list.
Je l'ai fait comme ceci dans le template d'element:
template<typename> friend class DualLinkedList;

Maintenant je veut coder un operator<< pour ma liste voici ca declaration:
friend std::ostream& operator<< (std::ostream& os,const                    DualLinkedList<T>& l) 

 Et voila enfin la question:
Je ne peut dans cette operator acceder aux donnée membres du template de l'element.   (Normale il ne fait pas partie de la list)

Donc: Comment rendre friend cette operator de la classe d'element ??

j'ai essaye ce genre de chose:
friend std::ostream& operator<< <>(std::ostream& , const DualLinkedList<T>& );

template<typename> friend std::ostream& operator<< <>(std::ostream& , const DualLinkedList& );  //avec ou sens le <>

Et d'autre ...

Pour info je suis sous linux et g++ 4

Bravo !!! et Merci tu est arrivé a me lire jusque ici, tu a gagné le petit merci, maintenant pour le grand ...    je croise les dois.
Si pas assez clair, tu peux me demande des precisions.

PS: desolé je ne sait pas ecrire francais et comme j'ai pas un cerveau dualCore c'est encord pire quant je reflechie en memme temps

a++

PS2: Y'a pas un truc pour faire une mise en forme "code"? je trouve pas...

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
tu mets juste:

friend std::ostream & operator << (std::ostream &, const DualLinkedList<T>&);


si ta classe est définie par : template <class T> class DualLinkedList ....


c'est n'importe quoi le <> qui se balade au milieu. "<>"
s'utilise que lors de spécialisation totale de template ce qui n'est
pas du tout ton cas ici.
Messages postés
4
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
21 décembre 2006

Salut deja merci,

Bon alors c'est ce que j'avais essaye en premier. je m'etait planter dans mon copie colle pour le <> (en memme temps avec le nombre de ligne de test commenter qu'il y avait)

avec ca g++ me dit:
DualLinkedListElement.h:28: error: expected ‘,’ or ‘...’ before ‘<’ token
DualLinkedListElement.h:28: error: ISO C++ forbids declaration of ‘DualLinkedList’ with no type

C comme pour la declaration friend de la classe il me dit la memme chose si je met:
friend class DualLinkedList<T>;
au lieu de:
template<typename> friend class DualLinkedList;

C pour ca que jai essaye de faire dans la memme idée
template<typename> friend std::ostream& operator<<(std::ostream& , const DualLinkedList& );

Merci pour la ptite explication du <> j'etait tomber dessue sur le net  et  au point ou j'en etait  ...

ciao