2016-01-27 26 views
5

Tôi muốn kế thừa từ một lớp lồng nhau, nằm trong phần riêng tư của lớp ngoài. Có thể không?Quyền thừa kế thuộc tầng lớp hữu nghị và riêng tư

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

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

class B : A::NiceNestedClass{ 
}; 

Việc khởi tạo NiceNestedClass không phải là vấn đề. Nhưng g + + không cho phép tôi thừa kế từ nó. Có bất kỳ công việc xung quanh?

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

Nó hoạt động: http://rextester.com/YIFH82076. Bạn có thể đăng lỗi mà bạn đang gặp phải không? Nó có lẽ không liên quan. –

Trả lời

5

Đây là một tiếng lỗi gcc đã được báo cáo lại trong 2013

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

Mã của bạn là đúng và cần biên dịch với các phiên bản mới hơn của gcc (cố định trên gcc4.9 trở lên). Về phía tôi (gcc5.3) nó hoạt động tốt.

3

Đây có thể là lỗi. Sử dụng gcc.godbolt.org và chạy

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

} 

trình với tất cả các phiên bản của vang, ICC và trên gcc 4.9.2 hoặc cao hơn. Nó không thành công với bất kỳ gcc nào 4.8.x trở xuống.

Các vấn đề liên quan