Implizite Konvertierung einer virtuellen Basisklasse
-
Hallo ,
habe folgendes Problem:
Ich habe 2 Klasse :
class Basisklasse { public: Basisklasse(void); ~Basisklasse(void); }; class Abgeleitet : public virtual Basisklasse { public: Abgeleitet(void); ~Abgeleitet(void); void Run(); }; BOOL CableitungDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; Basisklasse* poBasis = new Abgeleitet(); Run( ( Abgeleitet*) poBasis ); return FALSE; } Bekomme ich die Fehlermeldung: d:\MyProgramm\C++\ableitung\ableitung\ableitungDoc.cpp(44): error C2635: Konvertierung von 'Basisklasse*' in 'Abgeleitet*' nicht möglich; implizite Konvertierung einer virtuellen Basisklasse Wenn ich die Klasse < Abgeleitet > so deklariere : class Abgeleitet : public Basisklasse dann funktioniert es. Leider sind es nicht meine Klassen , sondern von einem Tool daher kann ich die Klasse nicht ändern. Wie kann ich das Problem umgehen ? Mfg, Elke
-
Hallo,
das Problem ist dein Cast. Ein down-cast von einer virtuellen Basisklasse erfordert einen dynamic_cast. Ein C-Cast ist hierfür ungeeignet.Unter der Annahme, dass deine Klassen polymorph sind (also mindestens eine virtuelle Methode enthalten) geht also folgendes:
Run( dynamic_cast<Abgeleitet*>(poBasis) );