Khi bạn khai báo hàm bạn cho 2 class, nếu bạn chưa có kinh nghiệm bạn sẽ dễ gặp lỗi inaccessible.
Dấu hiệu theo ví dụ bên dưới:
- Bạn đã khai báo friend void test(Matrix a, Vector b); trong class Matrix
- Bạn đã khai báo friend void test(Matrix a, Vector b); trong class Vector
- Nhưng chỉ 1 trong 2 truy cập được vùng private

Cách khắc phục
- Bạn khai báo tên của 2 class Matrix, và Vector ở đầu chương trình chính, sau đó viết nội dung class bên dưới.

- Nếu bạn chia file cho từng class, thì hãy làm như sau:
– Trong file .h của file này bạn khai báo class kia, mục đích báo cho trình biên dịch biết class kia có tồn tại.
VD: ở Matrix.h tôi khai báo Class Vector; Và trong Vector.h tôi khai báo class Matrix.h;
Một ví dụ khác đơn giản hơn
#include<iostream>
using namespace std;
class B; //defined later
class A; //correction (A also need be specified)
void add(A,B);
class A{
private:
int a;
public:
A(){
a = 100;
}
friend void add(A,B);
};
class B{
private:
int b;
public:
B(){
b = 100;
}
friend void add(A,B);
};
void add (A Aobj, B Bobj){
cout << (Aobj.a + Bobj.b);
}
main(){
A A1;
B B1;
add(A1,B1);
return 0;
}
Bạn có thể tham khảo thêm tại đây: http://stackoverflow.com/questions/18404299/can-2-classes-share-a-friend-function
