在下面的代码中:
class B {
int x;
int y;
};
class A {
friend class Other;
friend class A;
int a;
B* b;
public:
A(){ b = new B();}
};
struct Other {
A a;
void foo() {
std::cout << a.b->x; // error
}
};
int main() {
Other oth;
oth.foo();
}
指示的行失败了:
t.cpp:22:19: error: 'x' is a private member of 'B'
std::cout << a.b->x;
^
t.cpp:7:5: note: implicitly declared private here
int x;
为什么在从班级成员转介到其他班级成员时,友谊不起作用?
答案 0 :(得分:2)
虽然这是WebClient
的奇怪用法,但我认为这是出于学习目的。也就是说,您应该按照以下方式修改friend
定义:
friends
答案 1 :(得分:2)
这一行:
std::cout << a.b->x;
涉及在A
课程中访问b
(B
)的私人成员和x
(Other
)的私人成员。虽然A
授予Other
访问权限,但B
没有,因此错误。如果您希望这样做,您需要添加:
class B {
friend class Other;
};
旁注,这个宣言毫无意义:
class A {
friend class A;
};
一个类已经可以访问自己的私有成员。称之为自己的朋友是多余的。
答案 2 :(得分:0)
试试这个:
class B{
friend class Other;
int x;
int y;
};