Objekt als Ganzes in Dateien speichern möglich? -GELÖST-
-
Ist es möglich, das Objekt "a" als Ganzes an die Datei zu übergeben?
(Wie es z.B. bei Vektoren möglich ist.)#include <iostream> #include <string> #include <fstream> using namespace std; //Klasse einrichten class Spieler { //Eigenschaften public: string Nachname; string Vorname; }; int main() { //Datei anlegen fstream filestream("spieler.txt",ios::out|ios::trunc); filestream.close(); // leere Datei existiert jetzt //Datei öffnen filestream.open("spieler.txt", ios::in|ios::out); //Neues Objekt anlegen Spieler a; //Eigenschaften des Objektes in der Datei speichern. filestream<<a.Nachname<<' '; filestream<<a.Vorname<<' '; //Datei schließen filestream.close(); return 0; }
-
Deine Verwendung von filestreams ist völlig falsch. Und ja, ist möglich.
#include <iostream> #include <fstream> #include <string> #include <utility> // std::move struct person { std::string name; unsigned age; person(std::string name, unsigned age) : name(std::move(name)) , age(age) {} }; // Wir überladen operator <<, damit mir unseren Mist auf jeden ostream ausgeben können. Dazu gehören Files, aber auch std::cout ist einer. std::ostream& operator << (std::ostream& os, const person& p) { return os << p.name << " (" << p.age << ')'; } int main() { std::ofstream file("blah.txt"); // F.u.c.k yeah, die Datei wird automatisch erstellt, wenn nicht existent. file << person("Homer Simpson", 666); // Wenn dich das Ergebnis nach dem flushen nicht interessiert, dann lass es den Destruktor für dich erledigen. }
-
Danke für den Tip. Habe dann auch mal das Gegenteil versucht, nämlich nach Überladung des Operators aus einer Datei in ein Objekt einzulesen.
Erstaunlicherweise hat das anstandslos funktioniert.Leider kann mein Compiler Deinen Code nicht kompilieren, std::move wird nicht erkannt. Kann es sein, daß das zum neuen Standard C++11 gehört?
314159265358979 schrieb:
#include <utility> // std::move
-
redrew99 schrieb:
Leider kann mein Compiler Deinen Code nicht kompilieren, std::move wird nicht erkannt. Kann es sein, daß das zum neuen Standar C++11 gehört?
Ja, lass es einfach weg, dann sollte es funktionieren.