005
13.05.2003, 16:40 Uhr
~Michael L.
Gast
|
Danke für die Mühe (Das du ein Bsp geschrieben hast. Das sieht auch besser aus als meine Testumgebung
Zitat: |
Aber warum nutzt du nicht die Funktion CObArray::Add und fügst in CTermin ein Makro ein (DECLARE_SERIAL, IMPLEMENT_SERIAL)?
|
Shit eine Zeile weg gelassen! Ich mache das mit den 2 Makros. Und ich nutze auch die Add Funktion so wie du! Ich sehe eingentlich keinen Unterschied zu deinem Prog. Ausser einen Punkt, den habe ich anders. Kann es sein das er meine Serialize Funktion mit den Pointern so nicht will? (Gebe nochmal die Gesamte Klasse und meine Funktion wo ich einfüge!
C++: |
// Termin.h: Schnittstelle für die Klasse CTermin. // /////////////////////////////////////////////////// class CTermin : public CObject { DECLARE_SERIAL(CTermin) public: CString* GetDescription(); void SetDescription(CString); void SetTime(int,int,int,int,int,int); CTermin(); virtual ~CTermin(); virtual void Serialize (CArchive& ar); /// Zugriffsmethoden private: CString* m_strDescription; CTime* m_time;
};
// Termin.cpp: Implementierung der Klasse CTermin. // //////////////////////////////////////////////////////////////////////
#include "stdafx.h" #include "stdafx.h" #include "Termin.h"
#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif
IMPLEMENT_SERIAL (CTermin, CObject, 1) ////////////////////////////////////////////////////////////////////// // Konstruktion/Destruktion //////////////////////////////////////////////////////////////////////
CTermin::CTermin() { m_time = NULL; m_strDescription = new CString(""); }
CTermin::~CTermin() { delete m_strDescription; if(m_time!=NULL) delete m_time; }
void CTermin::Serialize(CArchive &ar) { /// Funktion der Basisklasse aufrufen CObject::Serialize(ar); /// Wird geschrieben oder gelesen if(ar.IsStoring()) { /// Variablen schreiben ar << *m_time << *m_strDescription; } else { /// Variablen lesen ar >> *m_time >> *m_strDescription; } }
void CTermin::SetTime(int sec, int min,int hour,int day,int month, int jear) { m_time = new CTime(jear,month,day,hour,min,sec); }
void CTermin::SetDescription(CString str) { *m_strDescription = str; }
CString* CTermin::GetDescription() { return this->m_strDescription; }
// Funktion mit der ich einfüge ////////////////////////////////// /** * Neuen Termin anlegen und einfügen */ bool CTerminplannerDlg::AddNewTermin(CTermin* termin) { try { this->m_oaTermin.Add(termin); this->m_iCurTermin = this->m_oaTermin.GetSize()-1; } catch(CMemoryException* ex) { // Benutzer über schlechte Neuigkeiten // informieren AfxMessageBox("Out of memory", MB_ICONSTOP | MB_OK); // Wurde Person-Objekt erzeugt? if (termin) { // Objekt löschen delete termin; termin = NULL; } delete ex; return false; } return true; }
|
Also nur das ich Zeiger benutze sehe ich keinen Unterschied!
mfg Michael L. |