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
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>
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