【问题标题】:If 'C' inherits from 'B' publicly, B inherits from 'A' privately, Why can't I create an object of 'A' inside 'C'? [duplicate]如果'C'从'B'公开继承,B私下从'A'继承,为什么我不能在'C'内部创建'A'的对象? [复制]
【发布时间】:2020-05-30 22:08:35
【问题描述】:

我正在使用 Visual C++,如果我编译这段代码:

class A {};
class B : private A {};
class C : public B
{
    void func()
    {
        A a{};
    }
};

我收到此错误:

错误 C2247:“A”不可访问,因为“B”使用“私有”继承 来自'A'

我知道如果我使用私有继承,那么类'A'的成员在'B'中是私有的,而在'C'中是不可访问的,但是为什么我不能在里面创建'A'的对象'C'?

【问题讨论】:

    标签: c++ inheritance scope access-modifiers name-lookup


    【解决方案1】:

    问题在于类 C 范围内的名称 A 是私有名称。

    就是所谓的注入类名。

    来自 C++ 标准(6.3.2 声明点)

    8 注入类名(第 12 条)的声明点是 紧跟在类定义的左大括号之后。

    使用以下使用限定名的方法

    class A {};
    class B : private A {};
    class C : public B
    {
        void func()
        {
            ::A a{};
          //^^^^^^ 
        }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多