我想继承一个嵌套类,它位于外部类的私有部分。有可能吗?
class A {
friend class B;
friend class C;
private:
class NiceNestedClass {
};
};
class C {
void a() {
A::NiceNestedClass works;
}
};
class B : A::NiceNestedClass{
};
NiceNestedClass的实例化不是问题。但是g ++不允许我继承它。有没有解决方法?
g++ -std=c++11 a.c -o a
a.c:5:11: error: ‘class A::NiceNestedClass’ is private
class NiceNestedClass {
^
a.c:15:14: error: within this context
class B : A::NiceNestedClass{
g ++ 4.8.4,std = c ++ 11
答案 0 :(得分:5)
这是一个已知的gcc错误,已在2013年报告
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59482
您的代码是正确的,应该使用较新版本的gcc进行编译(在gcc4.9及更高版本上修复)。在我这边(gcc5.3)它运作得很好。
答案 1 :(得分:3)
这可能是个错误。使用gcc.godbolt.org并运行
#include <iostream>
class A {
friend class B;
friend class C;
private:
class NiceNestedClass {
};
};
class C {
void a() {
A::NiceNestedClass works;
}
};
class B : A::NiceNestedClass{
};
int main(){
}
适用于clang,ICC和gcc 4.9.2或更高版本的每个版本。它以4.8.x或更低的gcc失败。