bool in Serialize



  • Hallo Leute!
    Hab Problem bei Speicherung bool Variable, kommt sowas als Fehler
    error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'bool' (or there is no acceptable conversion)

    Hier Code:

    void MyClasse::Serialize(CArchive &ar)
    {
        CObject::Serialize(ar);
        if (ar.IsStoring())
        {
        ar<<rect<<test;;//test ist bool
        }
        else
        {
        ar>>rect>>test;//test ist bool
        }
    

    Darf bool nicht gespeichert werden?... 😕
    Soll bool vielleicht in int oder in DWORD oder sonst noch was umgewandelt werden...
    Es wäre aber praktisch direkt bool zu speichern...
    Was soll ich tun...



  • bool oder BOOL? Wenn ich BOOL nehme, dann klappt das, ohne Probleme ...



  • Die Archivierung klappt nicht mit bit. Da solltest du einen anderen Datentyp nehmen. short int klappt auf jeden Fall.



  • sizeof(bool) == 1
    ->
    ar<<rect<<(BYTE)test;//test ist bool

    dürfte klappen!



  • Original erstellt von <Roland>:
    Die Archivierung klappt nicht mit bit.

    Blöd nur, dass bool 1 Byte hat 🙄 .



  • Original erstellt von Shaggy:
    bool oder BOOL? Wenn ich BOOL nehme, dann klappt das, ohne Probleme ...

    bool ist ein eigener Datentyp. BOOL dagegen ist nur ein typedef auf ein int.
    😉



  • Es mag ja sein, daß bool genau ein Byte entspricht, wird aber vom Compiler nie so behandelt. Der Compiler spricht genau ein Bit des Bytes an.

    Roland



  • @Roland

    Und was hat das mit dem Thema zu tun? Ist doch egal, wie der Compiler bool behandelt, wenn es mir möglich ist, bool als BYTE zu abstrahieren und damit zu serialisieren!



  • Ich habe eigentlich nur MaSTaH geantwortet. Immerhin hat er mich zitiert und anschliessend eine aus Compilersicht definitive falsche Antwort geliefert.



  • Original erstellt von <Roland>:
    Immerhin hat er mich zitiert und anschliessend eine aus Compilersicht definitive falsche Antwort geliefert.

    Der Compiler spricht überhaupt nix an, wenn dann der Prozessor. Ist klar, dass der nur ein Bit umsetzt wenn der aus ner 1 ne 0 macht und umgekehrt. sizeof(bool) ergibt bei mir aber immernoch 1.



  • Schau dir Disassemblierung an. Schau dir die Complilermeldung an wenn du versuchst eine grössere Zahl in eine bool Variable zu stellen.

    Und wie du darauf kommst, daß der Prozessor dafür verantwortlich wäre, wie ein typischer Programmiersprachen-Datentyp behandelt wird verstehe ich überhaupt nicht.

    Vielleicht sprechen wie auch aneinander vorbei, und darum sollten wir es hier jetzt einmal lassen.



  • Original erstellt von <Roland>:
    Vielleicht sprechen wie auch aneinander vorbei...

    Kann gut sein 😉



  • Schade, dabei wurde es gerade spannend ...



  • Original erstellt von <Roland>:
    Und wie du darauf kommst, daß der Prozessor dafür verantwortlich wäre, wie ein typischer Programmiersprachen-Datentyp behandelt wird verstehe ich überhaupt nicht.

    1.) Das habe ich auch garnicht gesagt. Zitier mich bitte richtig.

    2.) Weil ein Compiler keine alloziierte Variable ansprechen kann. Les doch mal bitte deinen Post in dem steht: "Der Compiler spricht genau ein Bit des Bytes an.". Der Compiler setzt keine Bits, wenn dann der Prozessor.

    EDIT: bool kennt nur true oder false. Dennoch belegt ein bool 1 Byte, auch beim speichern. Du hast oben gesagt serialize funktioniere nicht mit bit, was schlicht und ergreifend unpassend ist, da bool ein byte belegt. CArchive hat den << bzw. >> Operator nur nicht explizit für bool überladen. Deshalb muss man auf BYTE casten wie RenéG gesagt hat.

    [ Dieser Beitrag wurde am 08.05.2003 um 14:14 Uhr von MaSTaH editiert. ]


Anmelden zum Antworten