bit*_*ask 14 c++ inheritance private
g++拒绝让我访问某种类型,只是因为它恰好是一个私人的祖父.这有意义吗?
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
Run Code Online (Sandbox Code Playgroud)
编译这会产生:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
Run Code Online (Sandbox Code Playgroud)
我的观点是:我从不想A作为祖先访问.事实上,如果A是一个私人祖先B,不应该对任何人完全不可见,但B(即C)?
当然,我可以使用protected继承,但在我的情况下,它并没有真正意义.
ava*_*kar 13
这是由于注入的类名A隐藏了全局A内部C.虽然A是可见的,但它不可访问(因为它是作为私有导入的),因此是错误.您可以A通过在全局命名空间中查找来访问:
void foo(::A const& a) {}
Run Code Online (Sandbox Code Playgroud)
如果你声明它如下,它的工作原理
struct A {};
struct B : private A {};
struct C : B {
void foo(::A const& a) {}
};
Run Code Online (Sandbox Code Playgroud)
您看到的错误是名称解析无法访问.:: A表示查看全局命名空间而不是我继承的嵌套类类型.还记得私有继承只是说B有一个A和IMOHO是一个应该避免的愚蠢的语言功能.