Bitte um Hilfe bei der Ausgabe von struct
-
Goku++ schrieb:
Endlich funktionierts
aber ist es nun in Ordnung so wie ich es hab oder hab ich es jetzt etwas umständlich gemacht?Ist ganz ok so. Bloß das Design deiner Personenklasse erinnert mich an dies hier

-
SeppJ schrieb:
Goku++ schrieb:
Endlich funktionierts
aber ist es nun in Ordnung so wie ich es hab oder hab ich es jetzt etwas umständlich gemacht?Ist ganz ok so. Bloß das Design deiner Personenklasse erinnert mich an dies hier

Okay
aber ist ja nur zum Üben 
Wollte nur wissen ob ichstd::ostream& operator<<(std::ostream& s, person_type const& person) { s << person.name << " "; s << person.age << "\n"; return s; }immer in exakt dieser Form schreiben muss oder ob es nun auch anders geht weil der Operator << ja bereits überladen ist?
Habs noch weiter ausgebaut und funktioniert alles prima.
Vielen Dank nochmal

Lg
-
Hätte noch eine kleine Off-Topic Frage:
Wenn ich das Ganze nun am Computer speichern möchte mache ich das ja mit:std::ofstream o("data.txt"); o << human; o.close();aber dann speichert es nur eine Person in "data.txt".
Wenn ich das nochmal mache mit anderen Daten, dann überschreibt es meine erste Person.
Kann ich nun alles so abspeichern, dass z.B. die erste Person unter 01.txt speichert, die zweite unter 02.txt usw?
Und kann ich auch den Speicherort ändern (also, dass es nicht immer alles im VS Ordner speichert sondern z.B. auf dem Desktop oder noch besser in einem Ordner der sich am Desktop befindet)?Lg
-
Natürlich geht das. Dann musst du aber dafür sorgen, dass sich der Dateiname ändert und nicht immer
'data.txt'heißt. Wenn du die Datei in einem anderen Ordner speichern möchtest kannst du auch einen Pfad angeben. Also etwa'C:/Users/Sebi/Desktop/whatever/01.txt'oder so. Wobei das natürlich nicht sonderlich flexibel ist wenn man den Pfad so in seinen Quelltext schreibt. Zum testen oder wenn das Programm eh nur von dir verwendet wird kannst du das aber so machen.
-
Super, vielen Dank.
Aber wie kann ich den Namen flexibel machen, wenn ich ihn ich ein doppeltes Hochkomma schreiben muss?
Bzw wenn ich den ganzen Pfad angebe, dass sich nur das 01.txt am Ende ändert?
DankeLg
-
Leider funktioniert das bei vectoren nicht..
Bsp.:struct name_type { string first_name; string last_name; }; struct person_type { name_type name; vector<int> age; };Wie würde ich das nun auf der Konsole ausgeben lassen?
Bzw auf der Konsole und in ein file?(Klar ist es nicht sinnvoll das Alter in einen vector zu legen, dient aber lediglich für Übungszwecke).
Lg
-
Du überlädst den freien << operator, wie dus schon davor gemacht hast.
-
roflo schrieb:
Du überlädst den freien << operator, wie dus schon davor gemacht hast.
Dann kommt der Fehler:
Error C2679 binary '<<': no operator found which takes a right - hand operand of type 'const std::vector<int,std::allocator<_Ty>>' (or there is no acceptable conversion)
Error(active) no operator "<<" matches these operandsoder stimmt das dann so nicht:
std::ostream& operator<<(std::ostream& s, person_type const& person) { s << person.name << "\n"; s << "age: " << person.age << "\n"; return s; }Und das nächste problem ist ja, dass ich einen vector nicht so leicht mit einem cin einlesen kann, oder?
-
Da age jetzt ein vector ist müsstest du schon eine Schleife haben die dann alle Werte in dem vector ausgibt. Man kann auch einen operator<< erstellen mit dem man beliebige vector ausgeben lassen kann aber dafür braucht man Templates und das ist schon etwas fortgeschrittenes Thema.
-
sebi707 schrieb:
Da age jetzt ein vector ist müsstest du schon eine Schleife haben die dann alle Werte in dem vector ausgibt. Man kann auch einen operator<< erstellen mit dem man beliebige vector ausgeben lassen kann aber dafür braucht man Templates und das ist schon etwas fortgeschrittenes Thema.
Aber wenn ich age in einen vector lege und ihn in einer Schleife ausgeben lasse, habe ich immer noch das Problem, dass bei vectoren eine Benutzereingabe über die Konsole etwas schwierig wird??
-
Die Benutzereingabe ist immer etwas schwieriger wenn man beliebig viele Elemente einließt. Da gibts verschiedene Möglichkeiten. Entweder man fragt vorher ab wie viele Elemente eingegeben werden sollen oder man ließt so lange Elemente ein bis ein "leeres" oder irgendwie spezielles Element eingelesen wird.
-
also mit push_back?
oder wär es gleich besser die Eingabe mit ofstream einfach raus speichern und nachher den vector mit ifstream zu füllen?