fstream-probs
-
moin, folgendes prob:
[...] class BMP { [...] int Save( int *, int, string ); [...] }; BMP::Save( int *OutputVector, int OutputVectorSize, string FileName ) { char TrainDataHeader[255]; fstream fFile; fFile.open( FileName.c_str(), ios::app ); if( fFile.is_open() ) { fFile.getline( TrainDataHeader, 255 ); fFile.seekg( 0, ios::end); fFile.write( (char*)&BMPData, sizeof( BMPData ) ); fFile << endl; fFile.close(); return 0; } return 1; } int main(int argc, char *argv[]) { [...] BMP BMPFile; temp = new int(1); string TrainFileName( "test.data" ); cout << BMPFile.Save( temp, 2, TrainFileName ) << endl; return 0; }
BMP::Save gibt immer 1 zurück. wenn ich die datei direkt in der main-funktion öffne gehts. weis einer woran das liegt??
ach so: wenn da [...] steht hab ich an dieser stelle was weg gelassen.
-
Bei der Deklaration schreibst du:
[...] int Save( int *, int, string ); [...]
bei der Definition dagegen schreibst du:
BMP::Save( int *OutputVector, int OutputVectorSize, string FileName ); // Ich glaube es muss: int BMP::Save( int *OutputVector, int OutputVectorSize, string Filename ); // heissen.
Caipi
-
ne, daran liegts nich. hat noch jemand ne idee?
-
Mach aus
fstream fFile; fFile.open( FileName.c_str(), ios::app );
mal das hier:
fstream file(FileName.c_str(), ios::out);
Der Konstruktor erledigt nämlich die Aufgabe von open(). Desweiteren wäre in deinem Fall das Nutzen von ios::out mit der Verwendung von fstream angebracht, da dieses Flag aussagt: "Zum Schreiben öffnen".
-
naja, ios::out wär doof, weil ich ja lese und schreibe. die variante ohne ".open" ist zwar schöner, ändert aber nichts an meinem problem...
-
Eine kombination ist durchaus möglich.
fstream file(FileName.c_str(), ios:in | ios::out);
Hast du mal im Debugger geguckt, wie dein string FileName aussieht? Ist der gefüllt?
-
ahh, wunderbar. lag am ios::. wenn ich ios::out | ios::in nehme funktionierts.
thx