Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » noch mal serialize

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.06.2003, 13:03 Uhr
~michael
Gast


Ok ich konnte nun das Problem lokalisieren (hoffe ich)
Nur was is bei meiner Klasse falsch, so daß sie nicht Odnungsgemäß serialisiert wird? Ich verstehs echt nicht


C++:
///CTermin.h
class CTermin : public CObject  
{
    DECLARE_SERIAL(CTermin)
public:
    CString GetDescription();
    CString GetKind();
    CTime GetTime();
    void SetDescription(CString);
    void SetTime(int,int,int,int,int,int);
    void SetKind(CString kind);
    CTermin();
    virtual ~CTermin();
    virtual void Serialize (CArchive& ar);
    /// Zugriffsmethoden
private:
    CString m_strDescription;
    CTime m_time;
    CString m_strKind;
};

/// CTermin.cpp
IMPLEMENT_SERIAL (CTermin, CObject, 1)
//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CTermin::CTermin()
{
    m_time ;
    m_strDescription.Format("");
    m_strKind.Format("");
}

CTermin::~CTermin()
{
}

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 << m_strKind;
    }
    else
    {
        /// Variablen lesen
        ar >> m_time >> m_strDescription >> m_strKind;
    }
}

void CTermin::SetTime(int sec, int min,int hour,int day,int month, int jear)
{
    m_time = CTime(jear,month,day,hour,min,sec);
}

void CTermin::SetDescription(CString str)
{
    m_strDescription = str;
}

CString CTermin::GetDescription()
{
    return this->m_strDescription;
}

void CTermin::SetKind(CString kind)
{
    this->m_strKind=kind;
}

CString CTermin::GetKind()
{
    return m_strKind;
}

CTime CTermin::GetTime()
{
    return m_time;
}



Danke für die Hilfe!
mfg Michael
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.06.2003, 17:02 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Kannst du dein Projekt eventl. online stellen? Ist schwer zu sagen, was da net geht, obwohl meiner Meinung nach, der this Pointer weggehört, da du eigentlich nur ne normale klasseninterne Instanz dingbums zurückgibst rofl
Ebenfalls wäre es einen Versuch Wert, CTime nach char* zu casten, da der Operator normalwerweise kein CTime unterstützt (kann eventuell zu Speicherproblemen führen!?)

mfg mike
--

Dieser Post wurde am 14.06.2003 um 17:04 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.06.2003, 19:43 Uhr
~Michael
Gast


Also die this zeiger sind es nicht, aber ich denke die sind da nicht falsch! Ich dachte der compiler setzt eh bei Zeilen der Form:

C++:
a=b;


immer auf der linken Seite ein This Zeiger davor? Das habe ich mal irgendwo gelesen!

Das Projekt ist unter
www.magicfire.da.ru/datein/terminplanner.zip
" target="_blank">
www.magicfire.da.ru/datein/terminplanner.zip

zu finden. Ist etwas umständlich (noch). Wenn du ein neuen Termin einfügst musst du dannach erst auf SAVE und dann LOAD drücken! Dann, so die Theorie, sollte er angezeigt werden! Die Termine liegen in dem Verzeichnis unter dp.tp. Die Datei kannst nach belieben löschen, wird dann neu erzeugt!

Danke für die Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.06.2003, 20:14 Uhr
mike
Pinguinhüpfer
(Operator)


Meinst du die Acces Vialotion?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.06.2003, 20:26 Uhr
mike
Pinguinhüpfer
(Operator)


Wenn ja:
m_iCurTermin: CXX0017: Fehler: Symbol "m_iCurTermin" nicht gefunden
Der Fehler erfolgt in void CTerminplannerDlg::InsertTermins()
Funktion: m_ctrlView.SetItemText(i,2,temp->GetKind());

Also du das mit den this Zeigern kappier ich net ganz

geh mal unter e-books > Visual C++ in 21 Tagen > Datenserialisierung (Kapitel 12 o. 13)
Dort findest du ein Sample

mfg mike
--

Dieser Post wurde am 14.06.2003 um 20:26 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.06.2003, 21:01 Uhr
~michael
Gast


der acces vialotion kommt , da er nicht serialisiert! Ich übergebe eine gefüllte klasse und er serialsiert sie nicht! Daher stehen dann keine Daten drin und er versucht operationen auf daten die er nicht hat (nach dem laden! Wenn du das mit dem debugger verfolgst, siehst du, daß wenn du die Datei löschst einen neuen Termin anlegst, und auf save drückst er die Daten gespeichert hat (aus dem Dialog übernohmen). Läd man aber dann die gleichen Daten wieder mit Load, bekommst eine Klase wo alle Daten weg sind! Und das verstehe ich nicht! Also denke ich, daß das verschwindet wenn die Serialisierung geht!

this-zeiger: Ich kann das irgendwie schlecht erklären! Ich habe es mal so gelesen, daß wenn du mit einer Klasse arbeitest und in einer Funktion eine Variable benutzt und diese nicht vorher explizit in der Funktion angelegt hast, wird automatisch der this Zeiger davor gesetzt! sonst würde immer kommen das er die Variable (Membervariablen) nicht findet, da du sie ja nicht deklariert hast (in der Funktion)! Da aber immer das this davor kommt (nur bei solchen die nicht in der Funktion deklariert wurden), weiß der Compiler das er in der Klassse nachschauen muß ob er sie findet! Erst wenn er sie da nicht findet, kommt ein error, daß er sie nicht kennt! Ich hoffe das war jetzt verständlicher! Sonst chaten wir mal in icq und ich versuch da noch mal, da kannst mich dann ja gleich fragen wenn ich wider was unverständlich erkläre!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.06.2003, 21:11 Uhr
mike
Pinguinhüpfer
(Operator)


Hmmm. Ich hab beim Debuggen nur einen Fehlzugriff auf einen String gefunden.
Ich bin den ganzen Tag online
ICQ: 165337425

mfg
PS: Bist du Valentino Rossi Fan?

--

Dieser Post wurde am 14.06.2003 um 21:16 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: