Structs speichern - FAQ-Bsp funktioniert nicht



  • Folgender Code:

    // So sieht die Struct aus:
    struct PLAYER
    {
        char name [50];
        unsigned short int score;
        unsigned short int level;
    };
    
    ...
    
    /* Vorher wurden die Highscores ausgelesen, da es nur 5 sind lese ich alle aus
       und speichere nach der Änderung wieder alle 5 */
    
    FILE* Highscore = fopen(".\\highscores.dat","wb");
    
    for(unsigned short int i = 0;i < 5;++i)
    {
        fwrite(Player[i],sizeof(Player[i]),1,Highscore);
    }
    
    fclose(Highscore);
    

    Bringt mir diesen Fehler vom Compiler:

    error C2664: 'fwrite' : Konvertierung des Parameters 1 von 'struct PLAYER' in 'const void *' nicht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden.

    Warum kann er PLAYER nicht in void* konvertieren? In der FAQ ist es doch genau so beschrieben. Will wieder C++ :(;).

    MfG SideWinder



  • Der Fehler tritt auf, weil du keinen Pointer uebergibst.

    ersetze Player[i] durch Player+i*sizeof(struct player) oder durch &Player[i]



  • Ist sowas nicht wegen den unterschiedlichen paddings gefährlich wenn man es auf verschiedenen Compilereinstellungen testet?



  • jo, Binär-Ausgabe ist abhaengig vom Compiler/Platform. Vorallem bei structs ist das problematisch, wegen dem Padding



  • kingruedi schrieb:

    ersetze Player[i] durch Player+i*sizeof(struct player)

    Und streiche '*sizeof(struct player)'.


Anmelden zum Antworten