Struktur in Datei speichern



  • Hallo ich habe 2 Probleme beim binären speichern meiner Datenstruktur in eine Datei.

    Die Struktur sieht wie folgt aus und stellt ein Array aus Frames dar, welches zu jedem Zeitschritt eine beliebige Anzahl an Markern aufnehmen kann:

    typedef struct{
      unsigned long id;          
      float         quality;
      Wm3::Vector3f      pos; 
    } Marker;
    
    int main() 
    {
    
    const size_t numOfFrames = 3;
    
    vector<Marker> frame[numOfFrames];
    
    ...
    }
    

    Nun hatte ich mir überlegt die Struktur folgendermaßen abzuspeichern:

    fstream file;
    
    file.open("Ausgabe.xyz", ios::out || ios_base::binary);
    file.write((char*)numOfFrames, sizeof(size_t));     // Problem 2
    
    for (int x=0; x < numOfFrames ;x++) {
    	file.write((char*)frame[x].size(), sizeof(size_t));
    	for (int y=0; y < frame[x].size(); y++) {
    	        file.write((char*)(frame[x][y]), sizeof(Marker));	// Probelm 1
    	}
    }
    
    file.close();
    

    Erstes Problem ist, ich bekomme einen Compilerfehler:

    error C2440: 'type cast' : cannot convert from 'Marker' to 'char *'
    1>        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    

    Das zweite Problem trat auf, als ich das erste Problem aus-kommentiert habe und das programm gedebuggt hab. Und zwar tritt hier der fehler auf, wenn ich versuche numOfFrames in die Datei zu schreiben. Der debugger zeigt dabei den fehler in der datei iosfwd an, in der covert-funktion:

    static int_type __CLRCALL_OR_CDECL to_int_type(const _Elem& _Ch)
    		{	// convert character to metacharacter
    		return ((unsigned char)_Ch);
    		}
    

    Ich hoffe ich konnte die beiden Fehler verständlich erklären, sodass mir vielleicht jemand tips zum beheben nennen kann.

    Danke schonmal!



  • Wieso machst du dir eigentlich die Mühe den beiden for-Schleifen?

    file.write((char*)&frame, sizeof(frame)*numberOfFrames);
    

    (habs jetzt nicht getestet)



  • du versuchst da andauernd irgendwelche _werte_an_sich_ in char* zeiger umzuwandeln. Stattdessen musst du addressen deiner werte in char zeiger* umwandeln



  • Puuh, vielen dank. Das war ja nun wirklich ein simpler fehler. Nun funktioniert alles perfekt. Danke nochmal!!!


Anmelden zum Antworten