Seralisierung von Basisklasenzeigern mit Adressierung auf Abgeleite Klasse



  • Hallo Zusammen, ich habe folgendes Problem und bitte um Hilfe

    Ich halte in meiner Dokumentklasse eine Basisklasse(Zeiger auf diese) die nur als Schnittstelle dient. Während der Laufzeit wird dieser Zeiger dann mit einem Objekt vom Typ einer abgeleiteten Klasse adressiert.
    Beim Speichern dieses Objekts über die Serialize Methode wird dieses auch korrekt Serialisiert. Die Deserialisierung bringt jedoch die Fehlermeldung falsche Dateiformat (Schemanummer ist jedoch nicht der Fehler). Ursache ist wohl (Debugvorgang verfolgt) das die Deserialisierungsmethode einen Vergleich macht zwischen dem Typ der abgespeicherten Klasse und dem Typ der zu ladenden Klasse die ja zu diesem Zeitpunkt noch eine Basisklasse ist. Ich müsste wohl zuerst den Typ der abgespeicherten Klasse auslesen und dann ein Objekt davon erstellen. Nur wie soll das gehen.

    void CDoc::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())
    {
    ar<<m_pBase; //Serialize Methode der Abgeleitete Klasse aufrufen
    }
    else
    {
    ar>>m_pBase
    }
    }



  • Deine Klasse muss
    1. von CObject abgeleitet sein und
    2. die Makros DECLARE_SERIAL sowie IMPLEMENT_SERIAL implementieren

    Dann sollte es gehen.



  • DECLARE_SERIAL schrieb:

    Deine Klasse muss
    1. von CObject abgeleitet sein und
    2. die Makros DECLARE_SERIAL sowie IMPLEMENT_SERIAL implementieren

    Dann sollte es gehen.

    Nein, das ist nicht das Problem. Dies habe ich natürlich getan. Thema
    ist Basisklassenzeiger als Schnittstelle und Serialisierte Objekte jedoch als Ableitungen davon.


Anmelden zum Antworten