Bonjour à tous,
Je souhaite rendre un opérateur de flux (<<) ami d'une classe LinkedList et d'une sous classe LinkedList::LinkedNode.
voici maintenant l'opérateur ami:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template<typename T> class LinkedList { friend ostream& operator<<(ostream&, const LinkedList<T>&); template<typename T> class LinkedNode { friend class LinkedList<T>; friend ostream& operator<<(ostream&, const LinkedList<T>&); private: T element; LinkedNode<T>* next; } private: LinkedNode<T>* head; LinkedNode<T>* tail; }
Le compilateur me dit que je n'ai pas le droit d'accéder à 'element' et à 'next'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <typename T> ostream& operator<<(ostream& out, const LinkedList<T>& list) { LinkedList<T>::LinkedNode<T>* temp = list.head; // ce code ne fait rien, j'essaye juste d'accéder aux variables privées temp.element; temp.next; }
Indépendamment du fait qu'on aime ou pas utiliser les fonctions amies, ou les sous classes... j'aimerai comprendre pourquoi ce code ne marche pas. j'ai essayé sans les templates, avec des classes bidons, et ça marche bien...
Merci d 'avance pour vos réponses
Partager