如果'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{};
//^^^^^^
}
};
我正在使用 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{};
//^^^^^^
}
};