2017-01-09 4 views
1

개인 클래스를 내부 클래스의 부모로 사용하려면 어떻게해야합니까? 난개인 클래스를 내부 클래스의 부모로 사용하려면 어떻게해야합니까?

이 작업을 수행하려고 :

class A 
{ 
}; 

class B : private A 
{ 
}; 

class C : private B 
{ 
public: 
    class D : public A 
    { 
    }; 
}; 

int main() 
{ 
    C c; 
} 

그러나 나는 다음과 같은 오류를 받고 있어요. 이 문제를 해결할 수있는 방법이 있습니까? 아니면 개인을 보호 대상으로 변경해야합니까?

test.cpp:14:20: error: 'A' is a private member of 'A' 
    class D : public A 
       ^
test.cpp:6:11: note: constrained by private inheritance here 
class B : private A 
      ^~~~~~~~~ 
test.cpp: 1: 7: note: member is declared here 
class A 
    ^
1 error generated. 

답변

5

컴파일러는 C의 부모의 부모 유형을 참조하려고한다고 생각합니다. 이 모호성을 피하려면 A 유형을 완전히 지정하십시오. ::을 사용하여 전역 이름 공간을 나타냅니다.

class C : private B 
{ 
public: 
    class D : public ::A 
//  Add this ^^ 
    { 
    }; 
}; 

이것은 Injected class name의 경우입니다. 클래스 또는 템플릿의 정의에서 사용하거나 하나에서 파생 된 클래스 또는 클래스 템플릿의 이름을

은 규정되지 않은 이름 조회 이름이 멤버 선언에 의해 도입 된 경우로 정의되고있는 클래스 (함께 발견 공개 멤버 액세스)

관련 문제