2017-01-09 15 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の場合である。そのクラスの定義またはテンプレート内で使用される、または1つから派生したクラスまたはクラステンプレートの名前

名は(持つメンバ宣言によって導入されたかのように、非修飾名ルックアップが定義されていたクラスを発見パブリックメンバーアクセス)

関連する問題