Template rendre friend un operator<<

littlenemo Messages postés 4 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 21 décembre 2006 - 20 déc. 2006 à 04:59
littlenemo Messages postés 4 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 21 décembre 2006 - 21 déc. 2006 à 17:58
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 déc. 2006 à 13:10
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.
0
littlenemo Messages postés 4 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 21 décembre 2006
21 déc. 2006 à 17:58
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
0
Rejoignez-nous