考虑:
struct A { int x;};
struct B : A {};
struct C : private A {};
现在,正如预期的那样,代码
struct D : C
{
D () { C::x = 2; }
};
int main () { D d; }
无法编译:
test2.cc: In constructor ‘D::D()’:
test2.cc:1:16: error: ‘int A::x’ is inaccessible
test2.cc:7:12: error: within this context
现在,如果我这样做了
struct D : B, C
{
D () { C::x = 2; }
};
int main () { D d; }
然后错误消失! A::x
也不应该是不可访问的吗?这里的解释是什么?
如果这很重要,我正在使用 gcc 版本 4.7.2 (GCC)
,linux x86_64。
编辑:它不能用 Clang 3.2 编译:clang 3.2
但它适用于 gcc 4.7.2:gcc 4.7.2
最佳答案
这肯定是一个错误。没有理由从类 B
继承也应该改变 C
成员的可访问性。
甚至 GCC 4.8.0 (beta) 似乎都没有解决这个问题。另一方面,Clang 3.2 和 ICC 13.0.1,correctly refuse to compile this code .
关于c++ - 私有(private)基类和多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15398558/