2016-10-29 3 views
-4

Obwohl ich vermute, dass die Antwort hier Refactor ist, möchte ich das aus Zeitgründen vermeiden.Erben von einer Schnittstelle mit keinem Konstruktor, der von einer Klasse mit geschütztem Konstruktor erbt

Was ich habe, ist eine Klasse C, das erbt öffentlich von der Schnittstelle A, dass erbt öffentlich von der Schnittstelle B, das erbt öffentlich von der Klasse O.

O einen geschützten Konstruktor hat. A und B haben keinen Konstruktor (oder zumindest definiere ich keinen. Sind sie geerbt? Gelöscht?) C hat einen öffentlichen Konstruktor. Berufung sagte Konstruktor führt zu einem Compiler-Fehler:

'B::B(void)': attempting to reference a deleted function

class C : public A { 
public: 
C(){}; 
~C(){}; 
} 

C::C() { 
this->property = value; 
} 

class O { 
public: 
virtual ~O(){}; 
protected: 
O(){}; 
} 

class B : public O { 
public: 
virtual ~B(){}; 
} 

class A : public B { 
public: 
virtual ~A(){}; 
} 

Visual Studio 2015

Noch einmal, wenn möglich, eine große Refactoring vermeiden möchten. Gibt es eine schnelle (ish) Lösung?

Edit: Wenn Cs Konstruktor aufgerufen wird, ist es in Form von O * object = new C();

+2

"die öffentlich von der Schnittstelle A erbt, die öffentlich von der Schnittstelle A erbt" - äh, was? A erbt von sich selbst? – user2357112

+0

C versucht, den Standardkonstruktor von B aufzurufen, der scheinbar gelöscht wird (Ohne Angabe von uns kann das nicht erklärt werden.) Wenn es eine Möglichkeit gibt, B zu instanziieren, tun Sie dies am besten explizit im Konstruktor für C. – DeiDei

+0

Vielleicht ist das relevant? http://stackoverflow.com/questions/733360/why-do-we-not-have-a-virtual-constructor-in-c – Chemistpp

Antwort

Verwandte Themen