我有两个类,如下面的假人
class CA
{
private:
class Impl;
};
class Cb
{
private:
friend class CA::Impl;
}
此代码给出了编译错误,指出类CA :: Impl是私有的。是否真的不可能为嵌套的私有类建立友谊?我还能做些什么来实现这种语义?
答案 0 :(得分:4)
你,亚当和史蒂夫
想象一下,有一位名叫 Adam Stackie 的名人,他的朋友名叫 Steve 。
如果你知道关于 Adam 的某些事情,即使你不是他的朋友,只是假设你和 Steve 足够接近,这不是很奇怪你是否公开抓住他?
一个阶级不是隐含的朋友的朋友,也不是隐含的某种东西的朋友,它可以进入某些部分。
更严重
要使您的代码段正常工作,您必须
Cb
中为CA
添加前瞻和朋友声明,让Cb
成为CA
的朋友
,或; CA::Impl
公开,或者Cb
可以抓住CA::Impl
。答案 1 :(得分:2)
这是可能的,但您需要让Cb
成为CA
的朋友,以便允许其访问其私人成员。例如:
class Cb;
class CA
{
friend class Cb;
private:
class Impl;
};
class Cb
{
private:
friend class CA::Impl;
};