我以为我可以这样做:
class TestA
{
private:
class Nested
{
};
};
class TestB
{
public:
friend class TestA;
friend class TestA::Nested;
};
Run Code Online (Sandbox Code Playgroud)
但是我得到一个错误:
错误C2248'TestA :: Nested':无法访问在类中声明的私有类
有没有办法与私人嵌套班相处?我该怎么做?
尝试在MSVC 2017(C ++ 17)中编译MSVC 6项目时遇到此错误。我想那是可行的。
Bar*_*rry 16
同样,您也可以访问其他任何私人物品。您还需要友谊:
class TestA
{
friend class TestB; // <== this
private:
class Nested
{
};
};
class TestB
{
public:
friend class TestA;
friend class TestA::Nested; // <== now we're a friend of TestA, so we can access it
};
Run Code Online (Sandbox Code Playgroud)
这样做:
class TestA {
friend class TestB;
private:
class Nested {};
};
class TestB {
public:
friend class TestA::Nested;
};
Run Code Online (Sandbox Code Playgroud)
说明:它TestA本身有责任向他人提供对其内部结构的访问权限。想象任何人class都可以侵入性地使用友谊来访问其他类的内部结构(从库等),这将为任意破坏封装打开方便之门。