class A {};
class B : private A {};
class C : private B
{
public:
class D : private A {}; // Error here
};
这段代码在VS 2013中出现如下错误:
nested.cpp(8) : error C2247: 'A' not accessible because 'B' uses 'private' to inherit from 'A'
如果我像这样更改D
的定义,它会被修复:
class D : private ::A {};
这种行为是正确的吗?如果是,为什么?
起初我认为这是因为C
私有继承了B
导致基类被隐藏。但是,如果我消除中间类B
,仅使用以下代码:
class A {};
class C : private A
{
public:
class D : private A {};
};
错误消失了。