serialisierung von pointer



  • habe einen klassenstruktur in der assoziationen zwischen den klassen durch zeiger realisiert sind. jetzt möchte ich beim serialisiern diese beziehungen "festhalten", also die pointer serialisieren. alle klassen sind von CObject abeleitet und haben die serialisierungs - methode implementiert.

    im header:

    ClassA* m_ptrA;
    

    in Serialize:

    if (ar.IsStoring())
      ar << m_ptrA;
    else
      ar >> m_PtrA;
    

    compiler (vc6) meckert das die shift - operatoren nicht definiert sind.



  • Ich denke dass du nur Zeiger zu Strings ins CArchive stecken kanns. Das beste ist, du kreierst eine Serialize Funktion (oder so ähnlich) in deiner ClassA...

    So wäre es shon ganz gut:

    void ClassA::Serialize(CArchive &ar)
    {
    if (ar.IsStoring()){
     // Schieb die wichtigen Dateien deiner Klasse ins ar
    }else
     // Lade die wichtigen...
    }
    

    Dan must du so deine Serialize Funktion rufen:

    if (ar.IsStoring())
      ar << m_ptrA->Serialize(ar);
    else
      ar >> m_PtrA->Serialize(ar);
    

    So könnte es klappen.



  • ich will aber nich den inhalt der klasse serialisieren sondern den wert des pointers... den inhalt macht die klasse schon selbst



  • Ich weiß wirklich nicht was dir der wert des Zeigers nutzen will... aber wie auch immer, tue dies:

    ar << (int)pointer;
    


  • Psycho schrieb:

    ich will aber nich den inhalt der klasse serialisieren sondern den wert des pointers... den inhalt macht die klasse schon selbst

    Du musst dir aber im Klaren darüber sein, dass der Zeiger, wenn du ihn wieder aus der Datei ausliest, nichts mehr bedeutet, weil das Objekt, das dahinter steckt, gar nicht mehr existiert (bzw. nicht unter dieser Adresse).
    Schau dir mal CArchive::MapObject und http://www.parashift.com/c++-faq-lite/serialization.html an.


Anmelden zum Antworten