Funktion "Load()" liefert nur NULL aus binaerer datei zurueck
-
T0bi schrieb:
wm-meistern
Weltmeisterschaftsmeister?!
*SCNR*
-
LordJaxom schrieb:
T0bi schrieb:
wm-meistern
Weltmeisterschaftsmeister?!
*SCNR*
erwarte nicht zuviel von fußball-fans

btw. main() gibt int zurück
-
LordJaxom schrieb:
T0bi schrieb:
wm-meistern
Weltmeisterschaftsmeister?!
*SCNR*
ja wm meister... .die meister von der fussballmeisterschaft.....

aber zurück zum eigentlichen thema:
ich bin mit der sache wegen der funktion „load()“ immer noch kein stück weiter, ich habe zwar „ cout << „\n\n“ << load <<endl;“ nun so geaendert aber jetzt gibt er denk ich nur die speicheradresse aus (4205848), muss ich das nun mit einer referenz lösen??? Ich weiss es leider nicht.
Ach ja noch etwas, ich frage mich:
Wenn ich eine ofstream file(„bin.dat“,ios.binary|ios::app) habe und hier die strings( name, alter …) ablege[file << „\n“ << name << „/“ << alter << „/“ ….] und dann das prog noch mal laufen lasse und wieder elemente speichern werde sind die ja auch wieder vom selben string, und die werden auh wieder in die datei geschrieben, werden diese hinten an die datei geschrieben. Also muesste ja dann alles so aus sehen:Datei: test.dat
Name/alter/…… // personangaben für knut
Name/alter/…… // personangaben für keule
… // und weitere angaben von anderennun geb ich in meiner load funktion (die ja noch nicht wirklich funktioniert) den namen der datei an also test.dat . und will nun die daten von keule auslesen lassen und nicht die anderen.
Wie stell ich das an???
-
please answer

thanX!
-
Lies doch erstmal alle ein (z.Bsp. in ein Array) und suche dir dann die Daten für Keule raus. Oder weißt du der wievielte Datensatz das ist, den du suchst?
-
Also nach binär sieht mir das nicht aus:
ifstream file(load.c_str());Und warum willst du denn den inhalt einer binär datei mit cout ausgeben der text ist doch (wenns wirklich ne binär datei ist) nicht formatiert

Und dein Stil:
person::person() { } person::~person() { }Bei Funktionen muss immer ein Rückgabewert angegeben werden, und wenns nur void ist :).
(Außerdem, was willst mit ner funktion die nen leeren rumpf hat^^
-
So ich hab mir deinen Code nochmal angeguckt du willst also ne Instanz von ner Klasse in ne datei schreiben.
Das würde ich mit write() und read() machen da kannst auch angeben wie viele bytes gelesen werden sollen, da nimmst dann einfach:sizeof(person)Und nicht den modus ios::binary vergessen!!

-
das heisst also, das ich ja die maximalen byts festlegen muss richtig? also char name[30] .... geht sowas mit write nicht auch mit strings?
-
Nein!!
Du musst write sagen wie groß deine Klasse ist.
Und ausserdem kannst du keine Variablen vom type string binär speichern, da du dann nur eine addresse in die Datei schreibst.Entweder du änderst dein Konzept auf textbasiert nicht binär.
Oder du machst ne max lenght für name und so.Bsp.
class person { public: //methoden private: char[20] name; char[20] nickname; char[40] address; char[20] telnr; char[2] age; }; int main() { person Test; ofstream Datei; Datei.wirte((char *) &Test, sizeof(Test)); return 0; }Zwar bisschen abgemagert sollte es dir aber zeigen
mfg tobZel
-
grrrmmmmmmmmmlllll... ist echt zum .... hier... egal wie ichs drehe es funktioniert einfach nicht....
auf jeden fall gings so nicht... so hab ich nur 30fehler bekommen....ich habs nun als txt datei gemacht.... aber ich kann den string trotzdem net aus lesen lassen.... da erscheint dann einfach mal gar nix
-
Mein lieber tobZel. Das was du da geschrieben hast ist ziemlicher Quatsch.
@T0bi
Mach es als Text. Das ist für dich erstmal einfacher.
Wenn deine Strings keine Leerzeichen enthalten. Schreibe sie einfach mit einen Leerzeichen getrennt raus.string test11("Paul"); string test12 ("Mueller"); string test21 ("Frank"); string test22 ("Schmidt"); ofstream out("Test.txt"); out << test11 << " " << test12 << "\n"; out << test21 << " " << test22 << "\n"; out.close(); // dann einlesen ifstream ein("Test.txt"); string str1, str2; while( ein >> str1 >> str2 ) { // mach irgendwas mit den strings }Wenn Leerzeichen enthlaten sein können schreib jeden String in eine eigene Zeile und lies dann mit getline wieder ein.