g++
拒绝我访问某个类型,只是因为它碰巧是私人的祖父。这有意义吗?
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
编译它会产生:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
我的观点是:我从不想作为祖先访问A
。事实上,如果A
是B
的私人祖先,除了B
(即C
)之外,任何人都不应该完全看不到它吗?
当然,我可以使用protected
继承,但就我而言,它确实没有意义。
答案 0 :(得分:13)
这是因为A
中注入的班级名称隐藏了A
内的全局C
。虽然A
是可见的,但它不可访问(因为它是作为私有导入的),因此错误。您可以通过在全局命名空间中查找A
来访问它:
void foo(::A const& a) {}
答案 1 :(得分:8)
如果你按照以下方式声明它就可以了
struct A {};
struct B : private A {};
struct C : B {
void foo(::A const& a) {}
};
您所看到的错误是名称解析无法访问。 :: A表示查看全局命名空间而不是我继承的嵌套类类型。还记得私有继承只是说B有一个A而IMOHO是一个应该避免的愚蠢语言特性。