如果'C'公开地继承自'B',B私有地继承自'A',为什么我不能在'C'中创建'A'对象? [重复]

问题描述 投票:3回答:1

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

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

我收到此错误:

错误C2247:'A'无法访问,因为'B'使用'private'继承来自“ A”

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

c++ inheritance scope access-modifiers name-lookup
1个回答
3
投票

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

这是所谓的注入类名称。

从C ++标准(6.3.2声明点)

8注入类名称的声明要点(第12条)为紧随类定义的开头括号。

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

class A {};
class B : private A {};
class C : public B
{
    void func()
    {
        ::A a{};
      //^^^^^^ 
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.