Klasse mit STL-List in Datei schreiben
-
Snatcher schrieb:
Knuddlbaer schrieb:
Hm, vllt bin ich auch nur zum Umständlich beim erklären.
Schau Dir mal das Überladen von Operatoren an.
Überlade den operator << und >> für Deine Klasse. Da haste dann viel mehr
einfluss auf das was passiert und Du hast diese Probleme nicht.Wieso sollte ich diese Probleme nicht haben? Es geht mir nicht nur darum, die Klassen zu vervielfältigen, sondern sie sollen wirklich permanent gespeichert und zu anderem zeitpunkt wieder gelesen werden.
aua
void operator <<(ofstream& of,deine_Klasse& inhalt){ of<<inhalt.getzahl();//wirst ja die werte nich public haben^^ for(list<typ_deiner_Liste>::const_iterator position=inhalt.getliste().begin();pos<inhalt.getliste().end();++position){ of<<*position; } } //in der main ofstream datei("datei.txt,ios::binary): datei<<deine_Klasse; //ende
-
@otze: Nach dem Motto: Warum einfach, wenn's auch kompiliert geht?
Und nebenbei noch "falsch".Warum empfängst du einen ofstream? ein ostream wäre doch viel allgemeiner und sinnvoller? Warum gibtst du void zurück, statt den stream durchzureichen, warum gibst du die Klasse nicht als konstante Referenz, ... ?
Und was macht die äußere schleife da? soll die Liste mehrfach gespeichert werden?
Um deine Bezeichnungen weiter zu verwenden:
ostream & operator << (ostream & of, deine_Klasse const & inhalt) { of<<inhalt.zahl; copy (inhalt.name_deiner_liste.begin(), inhalt.name_deiner_liste.end(), ostream_iterator<typ_deiner_Liste>(of, "delimiter")); return of; } //in der main ofstream datei("datei.txt",ios::binary): datei<<deine_Klasse; //ende
Erst min einem Kommentar wie "aua" beleidigen und dann so einen Müll verzapfen.
-
Danke, jetzt hab ichs kapiert
-
Ich finde, dass du ziemlich unfair wirst.
Ich habe auf meine zugegebener Maßen sarkastische weiße versucht klarzumachen, dass deine Aussage keinerlei Inhalt besaß.
-
jaja wenn du richtig gelesen hättest, hättest du gemerkt dass ich einen iterator benutzt habe, und für den brauch man ne schleife...aber wieso lesen?
ich return den of/ostream nicht, weil es für mich noch nie eine situation gegeben hat, wo ich das gebraucht hätte. Es funktioniert, und das is meienr meinung nach das wichtigste.
auch wenn ich das const prinzip kenne,habe ich mich bisher nie dafür intressiert, weil mir der sinn relativ schleierhaft ist.
//edit achso die for schleife meinst du, ok da stand vorher was andres, hab ich wohl versehentlich beim überkopieren net markiert gehabt-.-
-
jaja wenn du richtig gelesen hättest, hättest du gemerkt dass ich einen iterator benutzt habe, und für den brauch man ne schleife...aber wieso lesen?
Dito. Ich verwende gleich zwei bidirektionale Iteratoren und einen Forwarditerator. Alle jedoch unbenannte Objekte, tut mir leid. Beim nächsten mal schreibe ich:
list<typ_deiner_Liste>::const_iterator begin = inhalt.name_deiner_liste.begin(); list<typ_deiner_Liste>::const_iterator end = inhalt.name_deiner_liste.end(); ostream_iterator<typ_deiner_Liste> out(of, "delimiter"); copy (begin, end, out);
Nur für dich.
ich return den of/ostream nicht, weil es für mich noch nie eine situation gegeben hat, wo ich das gebraucht hätte.
Du hattest noch nie sowas, wie
cout << "foo: " << foo << '\n';
Hier wird dieses Prinzip gleich mehrfach angewendet.
Es funktioniert, und das is meienr meinung nach das wichtigste.
Anfängerausreden, mit denen du nicht weit kommst. :p
-
Es funktioniert, und das is meienr meinung nach das wichtigste.
Anfängerausreden, mit denen du nicht weit kommst. :p
es werden noch wetten angenommen