【发布时间】:2013-05-25 10:44:25
【问题描述】:
我最近不得不做这样的事情:
class A { };
class B : private A { };
class C : public B {
public:
A *myA;
};
int main() {
return 0;
}
我在我尝试的三个编译器中遇到了错误。当我将myA 的声明更改为::A *myA 时,一切正常。我翻遍了 C++ 标准,发现第 11.2 节第 3 段说:
注意:私有基类的成员可能无法作为继承的成员名称访问,但可以直接访问。
哪些是相关的,但不清楚。为什么名称 A 无法访问?如果A不隐藏会出现什么问题?
谢谢,
-本
【问题讨论】:
-
我希望它能够编译,因为类 C 只是定义了一个变量 myA,它是指向 A 类类型变量的指针。myA 是在 B 类还是 A 类中定义为那些课程之一?
-
不。如果您将该代码复制并粘贴到您的编辑器中,您应该会得到相同的错误。至少对于 clang、gcc 和 Visual Studio 2010。
-
名称
A被注入到类A中并继承到B中。 [class]/2 告诉我们“出于访问检查的目的,注入的类名被视为公共成员名。”这就是为什么注入的类名A不能从C访问。
标签: c++