class B{ int m; friend class A; public: B():m(2){} }; class A{ public: int putb(B b){ return b.m+1; } }; 这个是可以的,但是将A类放在B类的前面,A类前面再加个class B;就不行了,那怎么做两个类互为友元类?
如果互为友元函数,比较好的解决方法是把实现部分单独写成cpp文件,比如 (注意,楼上那位说的不对,构造函数的实现不影响的,你愿意的话可以写在class原型里) ab.h文件: class B { int m; friend class A; public: int puta(A a); B() : m(2)//构造函数可以在这里写,也可以写在实现,对你的问题没有影响 { } }; class A { int m; friend class B; public: int putb(B b); A() : m(3) { } };
ab.cpp文件: #include "ab.h" int A::putb(B b) { return b.m + 1; } int B::puta(A a) { return a.m + 1; }
当然,也可以都写到一个.h文件里,但是会有其他问题(超出这个问题的范围,而且一般你不会碰到,可以留言讨论,这里不多说),上代码: ab.h class B { int m; friend class A; public: int puta(A a); B() : m(2) { } }; class A { int m; friend class B; public: int putb(B b); A() : m(3) { } }; int A::putb(B b) { return b.m + 1; } int B::puta(A a) { return a.m + 1; }