c++ - 如何与私有(private)嵌套类成为 friend

标签 c++ c++17 friend

我认为我可以这样做:

class TestA
{
private:
  class Nested
  {

  };
};

class TestB
{
public:
  friend class TestA;
  friend class TestA::Nested;
};

但我得到一个错误:

Error C2248 'TestA::Nested': cannot access private class declared in class

有没有办法让私有(private)嵌套类成为 friend ?我该怎么做?

我在尝试在 MSVC 2017 (C++17) 中编译 MSVC 6 项目时遇到此错误。我想它当时有效。

最佳答案

与您访问任何其他私有(private)事物的方式相同。你需要另一种友元:

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
};

关于c++ - 如何与私有(private)嵌套类成为 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56950798/

相关文章:

c++ - 递归编译结构的大小减去填充

c++ - Boost 能做什么而现代 C++ 不能?

c++ - 为什么我不能定义一个一元运算符,然后在 MSVC 的模板类中声明一个同名的友元二元运算符?

c++ - 如何从 C++ 中的函数返回 vector ?

c++ - 为什么mac不需要包含智能指针?

c++ - C++17 中的 std::map::insert 更改

c++ - 好友功能看不到私有(private)成员

C++: friend 模板类/模板非类型参数

c++ - 如何在openCV中获取像素矩阵和 reshape 矩阵

c++ - 在 C++ 机制中验证字符串