我正在使用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范围内的名称A
是私有名称。
这是所谓的注入类名称。
从C ++标准(6.3.2声明点)
8注入类名称的声明要点(第12条)为紧随类定义的开头括号。
使用以下使用限定名称的方法
class A {};
class B : private A {};
class C : public B
{
void func()
{
::A a{};
//^^^^^^
}
};