Bonjour,

J'aimerais, dans une classe template, déclarer que la classe du paramètre template est amie.

Exemple :

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
//------------------------------------------------------------------------------
template<class T>
class A
{
  friend class T; // problème ici
 
private:
  void f( const T& t ) { t.g(); }
}; // class A
 
//------------------------------------------------------------------------------
class B
{
  friend class A<B>;
 
public:
  void h()
  {
    A<B> a;
    a.f( *this );
  }
 
private:
  void g() const { std::cout << "ok" << std::endl; }
}; // class B
 
//------------------------------------------------------------------------------
int main()
{
  B b;
  b.h();
 
  return 0;
}
Mais le compilateur fait la tête :

Citation Envoyé par g++
erreur: une clé de classe doit être utilise lors de la déclaration d'un ami
Est-ce que ce que je veux faire est faisable ou dois-je trouver une autre solution ?

Merci