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