【问题标题】:Friendship and private nested class inheritance友谊和私有嵌套类继承
【发布时间】:2016-05-04 14:30:07
【问题描述】:

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

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

【问题讨论】:

标签: c++ inheritance inner-classes friend


【解决方案1】:

这是 2013 年报告的已知 gcc 错误

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59482

您的代码是正确的,应该可以使用较新版本的 gcc(已在 gcc4.9 及更高版本上修复)进行编译。在我这边(gcc5.3)它工作得很好。

【讨论】:

    【解决方案2】:

    这可能是一个错误。使用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 都会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 2011-06-16
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多