2017-11-01 20 views
2

まずクラスB1と派生クラスD1を定義します。次に、B1への参照を定義し、それを私が定義したD1オブジェクトに初期化したいと思います。ここでは、「アクセス不可能な基本クラス 'B1'への変換は許可されていません」というエラーが表示されますが、その理由はわかりません。クラスのアクセス不可能な基本クラスへの変換は許可されていません。

#include "std_lib_facilities.h" 

class B1 { 
public: 
    virtual void vf() { cout << "B1::vf()\n"; }; 
    void f() { cout << "B1::f()\n"; }; 
}; 

class D1 :B1 { 
public: 
    void vf() { cout << "D1:vf()\n"; }; 
    void f() { cout << "D1::f()\n"; }; 
}; 




int main() 
{ 
    B1 b1; 
    b1.vf(); 
    b1.f(); 

    D1 d1; 
    d1.vf(); 
    d1.f(); 

    B1& db=d1;//error 

    keep_window_open(); 
    return 0; 
} 
+2

あなたは 'B1'民間ベースにするもしかして?そうでなければ、それを 'class D1:public B1 {...};にしてください。そうなら、エラーメッセージは適切であり、期待されます。プライベート継承のポイントは基本クラスにアクセスできないようにすることです。 –

答えて

4
class D1 :B1 

継承はデフォルトでprivateである、あなたはそれpublic行う必要があります。

class D1 : public B1 
関連する問題