Überladene Funktion(en) nutzen (FileStream Klassen)



  • Hallo !

    Kann mir jemand sagen warum ich die überladene 'unsigned char' "Funktion" der Methoden read/write nicht verwenden kann ? Es kommt dann immer der Compilerfehler:

    error C2664: 'write' : Konvertierung des Parameters 1 von 'unsigned char *' in 'const char *' nicht moeglich
    

    😕



  • Steht doch da, er erwartet

    const char *
    

    und du übergibst

    unsigned char *
    

    Mach das unsigned weg und es sollte funktionieren bei der übergabe.
    Der unterschied zw. char und unsigned char ist das char einen Wertebereich von -128 bis 127 und unsigned char einen Wertebereich von 0 bis 255 hat, was das ja unsigned schon sagt.

    Code-Hacker



  • Soweit ich weiß, ist nicht festgelegt, ob char ein Vorzeichen hat oder nicht. Es ist aber so oder so ein anderer Typ als signed/unsigned char.

    Und in der MSDN finde ich nichts von einer für unsigned char* überladenen Funktion. Streams können nur char_type* lesen und schreiben, das ist bei fstream nunmal char*.



  • operator void schrieb:

    Soweit ich weiß, ist nicht festgelegt, ob char ein Vorzeichen hat oder nicht.

    Ich habe es so gelesen. Somit kannst du tatsächlich mit vorzeichenbehafteten Zahlen arbeiten solltest, kannst du char verwenden, wenn du ohne Arbeitest dann unsigned char. In Pascal z.B. gibt es ja den Datentypen byte, wenn man mit so kleinen Zahlen arbeiten will (in C++ gibt es nur char, was bei Ausgaben zu Zeichen wird).

    Code-Hacker



  • Code-Hacker schrieb:

    Ich habe es so gelesen. Somit kannst du tatsächlich mit vorzeichenbehafteten Zahlen arbeiten solltest, kannst du char verwenden, wenn du ohne Arbeitest dann unsigned char.

    Ob char äquivalent zu signed char oder zu unsigned char ist ist implementation defined.

    edit: Feststellen lässt sich das übrigens via numeric_limits<char>::is_signed.



  • Die Methoden read und write sind mit 3 versch. Typen überladen.
    1.) const signed char*
    2.) const char*
    3.) const unsigned char*

    Warum ist es also nicht möglich einen unsigned char Pointer zu verwenden ?



  • Laut der Fehlermeldung gibt es keine Ueberladung fuer unsigned char*


Anmelden zum Antworten