#include using namespace std; // Declaration classe B //===================== class A; // Le compilateur doit savoir que A est une classe class B; // Le compilateur doit savoir que B est une classe... pas utile ici ! class B { public : int f(int n, const A& a); }; // Declaration classe A //===================== class A { friend int B::f(int n, const A& a); public : void setA(int a); private : int _a; }; // Code classe A //============== void A::setA(int a) { _a = a; } // Code classe B //============== int B::f(int n, const A& a) { return n + a._a; } // Code du main //============= int main(void) { A a; a.setA(2); B b; cout << b.f(10,a) << endl; // 12 return 0; }