如果'C'公开继承'B',B则私有继承'A',为什么我不能在'C'里面创建一个'A'的对象?

If 'C' inherits from 'B' publicly, B inherits from 'A' privately, Why can't I create an object of 'A' inside 'C'?

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

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

我收到这个错误:

error C2247: 'A' not accessible because 'B' uses 'private' to inherit from 'A'

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

问题是 class C 范围内的名称 A 是私有名称。

这是所谓的注入class名称。

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

8 The point of declaration for an injected-class-name (Clause 12) is immediately following the opening brace of the class definition.

使用以下方法,即使用限定名称

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