2017-11-01 10 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'을 찾으셨습니까? 그렇지 않다면 클래스 D1 : public B1 {...};을 작성하십시오. 그러면 오류 메시지가 적절하고 예상됩니다. 개인 상속의 전체적인 포인트는 기본 클래스를 액세스 할 수 없게 만드는 것입니다. –

답변

4
class D1 :B1 

상속은 기본적으로 private, 당신은 그것을 public을해야한다 :

class D1 : public B1