Klasse Speichern
-
Hallo zusammen,
ich möchte gerne die Daten einer Klasse speicher um dann wieder mit Ihnen zu Arbeiten.
Ich habe es so versucht, aber es funktioniert so nicht.
Speichern funktioniert noch:class Karteikarte{ public: ... private: ... }; Karteikarte K1; fstream f; f.open("test.dat", ios::binary | ios::out); f << K1;Das hier funktioniert nicht:
fstream f; f.open("test.dat", ios::binary | ios::in); f.operator >>(K1); f.close();Hat jemand ne Idee
-
Das wird so auch nicht funktionieren.
Ich denke mal du willst auch nur die Daten aus deiner Klasse speichern und nicht auch die Methoden.
Dafür solltest du dir dann eine Methode 'save' schreiben, die dieses übernimmt.
Und dann brauchst du logische auch noch eine methode 'load' um die Daten wieder zu laden.
-
Aber das ist eigentlich nichts was Builder spezifisch ist ...

-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Statt den Methoden save und load kannst du natürlich auch den Operator << und >> überladen. Dann kannst du auch
f << K1schreiben. Wobei es sich anbietet, beides zu machen und dann die Operatoren die entsprechende Methode aufrufen zu lassen. Hier findest du eine (sehr kurze) Einführung in Abschnitt 3.4:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010.html
-
Das Problem ist nur, dass ich in meiner Klasse auch wieder Klassen als Variablen habe. Und zwar zwei TSrings(deshalb auch im Builder-Forum, hätte ich aber vielleicht gleich erwähnen sollen)
class Karteikarten { public: .... private: TStrings* S1; TStrings* S2; .... };Und dann habe ich wieder das Gleiche Problem. Ich möchte nicht die Save-Funktionen der TSrings Klasse verwenden, da ich die Daten meiner Klasse in einer Datei haben möchte.
-
Du könntest wie gesagt ne save-Methode und load-Methode schreiben und das ganze dann dort nicht im binary-Mode sondern im normalen Modus in ne Datei schreiben mit nem bestimmten von dir gewähltem Format bzw Formatierung.
Lg freeG
-
Maiki2 schrieb:
Ich möchte nicht die Save-Funktionen der TSrings Klasse verwenden
Hat die TString-Klasse die Shift-Operatoren nicht überladen?
Gibt's eigentlich irgendwo 'ne online VCL-Referenz?
-
Schau doch mal hier
http://docwiki.embarcadero.com/RADStudio/2010/en/Main_Page
-
flac schrieb:
Aber das ist eigentlich nichts was Builder spezifisch ist ...

Richtig - es sei denn, man will sich der C++Builder-Spezifika (RTTI und Properties) bedienen, mit denen dieser Vorgang automatisierbar ist.
Schau dir mal an, wie die Komponentenserialisierung funktioniert. Stichworte: TStream::ReadComponent()/WriteComponent(), ObjectTextToBinary()/ObjectBinaryToText().