如何将私有父类用作内部类的父类

How can I use a private parent class as a parent of an internal class?

本文关键字:父类 内部类      更新时间:2023-10-16

如何使用私有父类作为内部类的父类?

我正在尝试这样做:

class A
{
};
class B : private A
{
};
class C : private B
{
public:
  class D : public A
  {
  };
};
int main()
{
  C c;
}

但是我收到以下错误。有什么方法可以解决它,还是我需要将私有更改为受保护?

test.cpp:14:20: error: 'A' is a private member of 'A'
  class D : public A
                   ^
test.cpp:6:11: note: constrained by private inheritance here
class B : private A
          ^~~~~~~~~
test.cpp: 1: 7: note: member is declared here
class A
      ^
1 error generated.

编译器认为您正在尝试引用 C 的父级的父级类型。完全指定A的类型以避免这种歧义。使用 :: 表示全局命名空间。

class C : private B
{
public:
  class D : public ::A
//        Add this ^^
  {
  };
};

这是注入类名的情况。

对于在该类或模板的定义中使用的类或类模板

派生自某个类或模板的名称,非限定名称查找查找正在定义的类,就好像该名称是由成员声明引入的(具有公共成员访问权限)