友谊和私有嵌套 class 继承
Friendship and private nested class inheritance
我想继承嵌套 class,它位于外部 class 的私有部分。可能吗?
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
这是 2013 年报告的已知 gcc 错误
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59482
您的代码是正确的,应该可以使用较新版本的 gcc 进行编译(已在 gcc4.9 及更高版本上修复)。在我这边(gcc5.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 都会失败。
我想继承嵌套 class,它位于外部 class 的私有部分。可能吗?
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
这是 2013 年报告的已知 gcc 错误
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59482
您的代码是正确的,应该可以使用较新版本的 gcc 进行编译(已在 gcc4.9 及更高版本上修复)。在我这边(gcc5.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 都会失败。