2016-01-27 16 views
5

Vorrei ereditare da una classe annidata, che si trova nella sezione privata della classe esterna. È possibile?Eredità di classe innata e privata

class A { 
    friend class B; 
    friend class C; 
    private: 
    class NiceNestedClass { 
    }; 
}; 

class C { 
    void a() { 
    A::NiceNestedClass works; 
    } 
}; 

class B : A::NiceNestedClass{ 
}; 

L'istanziazione di NiceNestedClass non è un problema. Ma g ++ non mi permette di ereditarmi. C'è qualche soluzione?

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

Funziona: http://rextester.com/YIFH82076. Potresti postare l'errore che stai ottenendo? Probabilmente non è correlato. –

risposta

3

Questo potrebbe essere un bug. Utilizzando gcc.godbolt.org e funzionante

#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(){ 

} 

funziona con ogni versione di clang, ICC e su gcc 4.9.2 o superiore. Fallisce con qualsiasi gcc di 4.8.xo inferiore.