友谊和私有嵌套类继承

时间:2016-01-27 14:59:36

标签: c++ inheritance inner-classes friend

我想继承一个嵌套类,它位于外部类的私有部分。有可能吗?

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

2 个答案:

答案 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失败。