014
22.08.2005, 13:03 Uhr
~Patrick
Gast
|
Funktioniert! Danke schon mal hierfür. Zwar motzt der Compiler jetzt nicht mehr über fehlende Konstruktoren, dafür macht er mir das Serialisieren an sich recht schwierig, mit der Standard - Funktion komm ich leider nicht weit. Meine aktuelle Serialize() - Funktion meiner Klasse ClInschrift sieht wie folgt aus:
| C++: |
void ClInschrift::Serialize(CArchive &ar) { CObject::Serialize(ar); CString nummerTemp, textTemp; nummerTemp = text.c_str(); textTemp = text.c_str(); if (ar.IsStoring()) ar << nummerTemp << textTemp; else ar >> nummerTemp >> textTemp; }
|
Die Umwandlung in CStrings nehme ich vor, weil die Ein - und Ausgabeoperatoren scheinbar nicht für String überladen sind. Das eigentliche Problem tritt aber erst dann auf, wenn ich die Funktion aufrufen will. Zu diesem Zweck habe ich einen Button hinzugefügt, der zunächst ein Objekt vom Typ ClInschrift erzeugt, und dieses dann speichern soll.
| C++: |
ClInschrift test("Text1","text2"); test.Serialize(ar);
|
Bisher dachte ich, dass ich mir um die CArchive Objekte wenig bis keine Gedanken machen muss, weil diese durch die Makros und das Anwendungsgerüst hinzugefügt werden. Da habe ich mich aber scheinbar geirrt. Der Conmpiler motzt:
| Zitat: |
...Inschrift\InschriftDlg.cpp(728): error C2065: 'ar': nichtdeklarierter Bezeichner
|
Header usw. sind richtig eingebunden, daran wirds also wahrscheinlich nicht liegen. Allerdings gehen mir leider wieder die Erklärungen aus. Hier nochmal die Klassendeklaration mit laufender Zuweisung (danke an FloSoft):
| C++: |
class ClInschrift : public CObject { DECLARE_SERIAL(ClInschrift) public: ClInschrift() {this->text = ""; this->nummer = "";} ClInschrift(string text, string nummer) {this->text = text; this->nummer = nummer; } ~ClInschrift() {return;} //Destruktor virtual void Serialize(CArchive &ar); ClInschrift & operator = (const ClInschrift &source) { if (this == &source) return *this; this->nummer = source.nummer; this->text = source.text; return (*this); }
ClInschrift(const ClInschrift &source) {this->text = source.text; this->nummer = source.nummer;} string displayText() {return text;} string displayNummer() {return nummer;} private: string text; string nummer; };
|
Jemand nen Vorschlag, warum meine Objekte nicht gespeichert werden wollen? Patrick |