class A {
    public:
            int a;
};

class B: private A {
};

class C: public A {
};

class D: public B, public C {
        D() {
                B::a = 0;
        }
};
.

这个编译虽然b私人继承A.如果我删除了c的继承,编译器说a无法访问,就像我期望的那样。所以c的继承令我困惑我的编译器?

编译器是gcc 4.4.7

有帮助吗?

解决方案

看起来像一个真正的编译器错误,因为标准不允许在

中获得此类访问

11.2基类和基类成员的可访问性

寻找标准本身之外的证据,Whozcraig已经提出,克朗不允许这种访问。

寻找可能在gcc中混淆的类似模式,有虚拟基类A的DIAMON继承,这将允许这种访问,因为大多数访问的路径确定应用了哪些保护。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top