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) );
    

Anmelden zum Antworten