c++ - 私有(private)基类和多重继承

标签 c++

考虑:

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/

相关文章:

c++ - С++ 可变参数模板 : implement variadic functor

c++ - 在 vb.net 应用程序中使用 C++ 头文件?

c++ - 任意精度无符号整数仅支持后递增运算符

c++ - 写入文件功能和性能

c++ - 如何保护您的软件不被禁用

c++ - 在 Yosemite 上的 GCC 编译期间不再可能包含 Carbon header ?

c++ - 在STL关联容器中使用基于迭代器的搜索和使用是否更快?

c++ - 为什么我的 `.a` 文件中所有符号的值都是 0

c++ - 非类型模板参数的类型抽象

c++ - 为什么将函数名用作函数指针等同于将寻址运算符应用于函数名?