友谊和私有嵌套类继承

Friendship and private nested class inheritance

本文关键字:继承 嵌套 友谊      更新时间:2023-10-16

>我想从嵌套类继承,该嵌套类位于外部类的私有部分。可能吗?

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

这是一个已知的 gcc 错误,早在 2013 年就被报告

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。