Bonjour, j ai un code qui ressemble a ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
template<typename T> class A{
/* ... */
template<typename E> friend ostream& operator <<  (ostream&, const A<E>& );
};
 
template<typename E> ostream& A<E>::operator<<(ostream& out, const A<E>& G){
/* .... */
}
et j'obtiens ce message du compilateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
error: ‘std::ostream& A<E>::operator<<(std::ostream&, const A<E>&)’ must take exactly one argument
  template<typename E> ostream& A<E>::operator <<(ostream& out, const A<E>& G)                                                                                                                           ^
                                                                                                                           ^
Je ne comprends pas cette histoire d'un seul argument vu que j'ai bien l'impression d'en déclarer deux...

Edit :

Je laisse ma question originale mais j'y adjoins un copier/coller d'un extrait du code réel... (malgré mes relectures je ne vois toujours pas ou est le problème...)
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
 
template<typename T> class Graph  {
/* .... */
template<class E>  friend  ostream& operator << (ostream&, const Graph<E>& );
 
    virtual
    ~Graph (){for(auto it=nodes.begin() ; it!=nodes.end(); it++) delete *it;}
  };
 
 template<class E> ostream& Graph<E>::operator << (ostream& out, const Graph<E>& G)
 {
   const string pad="   ";
   /* ... */
   return out;
}