gpt4 book ai didi

c++ - 多层次的友元

转载 作者:行者123 更新时间:2023-11-30 01:44:27 25 4
gpt4 key购买 nike

在下面的代码中:

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;

为什么类(class)成员之间的友元不起作用?

最佳答案

这一行:

std::cout << a.b->x;

涉及访问A的私有(private)成员(b)和B的私有(private)成员(x)在类 Other 中。虽然 A 将访问权限授予 Other,但 B 没有,因此出现错误。如果你想让它工作,你需要添加:

class B {
friend class Other;
};

旁注,这个声明是没有意义的:

class A {
friend class A;
};

一个类已经可以访问它自己的私有(private)成员。所以称它为自己的 friend 是多余的。

关于c++ - 多层次的友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com