如何与私人嵌套课程成为朋友

Tom*_*ica 15 c++ friend c++17

我以为我可以这样做:

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)

  • @Quentin我的意思是巴里在维持类的同时找到了一种“结构化”的生活方式。这就是为什么我渴望成为“朋友”。 (6认同)
  • @SombreroChicken而且,如果没有`int main()`,就不能拼写_maintaining_。 (6认同)

lub*_*bgr 9

这样做:

class TestA {
   friend class TestB;
   private:

   class Nested {};
};

class TestB {
   public:
      friend class TestA::Nested;
};
Run Code Online (Sandbox Code Playgroud)

说明:它TestA本身有责任向他人提供对其内部结构的访问权限。想象任何人class都可以侵入性地使用友谊来访问其他类的内部结构(从库等),这将为任意破坏封装打开方便之门。

  • @Bathsheba感谢您给我的答案更多的自信;) (4认同)