2017-11-01 1 views
2

Ich definiere zuerst eine Klasse B1 und eine abgeleitete Klasse D1. Dann möchte ich eine Referenz auf B1 definieren und diese auf das D1-Objekt initialisieren, das ich gerade definiert habe. Hier kommt der Fehler, dass "Konvertierung in unzugängliche Basisklasse 'B1' nicht erlaubt ist", weiß ich nicht warum.Umwandlung in unzugängliche Basisklasse ist nicht erlaubt

#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

Meinten Sie eine private Basis zu machen 'B1'? Wenn nicht, mach es zu 'class D1: public B1 {...};' Wenn ja, dann ist die Fehlermeldung korrekt und erwartet - der ganze Punkt der privaten Vererbung besteht darin, die Basisklasse unzugänglich zu machen. –

Antwort

4
class D1 :B1 

Vererbung von Klassen private standardmäßig ist, sollten Sie es public machen:

class D1 : public B1 
Verwandte Themen