Instanziieren Sie ein Objekt abgeleitete Klasse, deren Basisklasse ctor private
Wie Sie instanziieren ein Objekt abgeleitete Klasse, deren Basisklasse ctor private?
Seit ctor der abgeleiteten Klasse ruft implizit den base class ctor(das ist privat), der compiler-Fehler gibt.
Betrachten Sie das folgende Beispiel-code unten:
#include <iostream>
using namespace std;
class base
{
private:
base()
{
cout << "base: ctor()\n";
}
};
class derived: public base
{
public:
derived()
{
cout << "derived: ctor()\n";
}
};
int main()
{
derived d;
}
Dieser code gibt den Kompilierungsfehler:
accessing_private_ctor_in_base_class.cpp: Im Konstruktor
derived::derived()': accessing_private_ctor_in_base_class.cpp:9:
base::base () " ist privat
error:
accessing_private_ctor_in_base_class.cpp:18: Fehler: in diesem
Kontext
Wie kann ich den code ändern, entfernen Sie den Kompilierungsfehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Möglichkeiten:
public
oderprotected
.friend
von der Basis-Klasse. sehen demoKann man nicht Erben von einem Basis-Klasse, deren einzige Konstruktor ist privat.1
Also die Basis-Klasse Konstruktor public/protected, oder fügen Sie eine andere Basis-Klasse-Konstruktor.
1. Es sei denn, als Nawaz Punkte heraus, Sie sind ein Freund der Basisklasse.
Können Sie nicht. Das ist in der Regel der Grund für die nur der c ' Tor privaten, nicht zulassen Vererbung.