signed und unsigned char Problem



  • Hi!

    Wenn ich folgendes schreibe:

    signed char *A = "Hallo.";
    unsigned char *B = "Hallo.";
    char *C = "Hallo.";
    

    gibt mir der VC 6.0 Compiler bei den oberen beiden Zeilen Fehler aus:

    error C2440: 'initializing' : 'char [7]' kann nicht in 'signed char *' konvertiert werden ...
    

    Und so würde es natürlich gehen:

    signed char A[7] = "Hallo.";
    unsigned char B[7] = "Hallo.";
    char *C = "Hallo.";
    

    Woran liegt das nun?

    Standardmäßig ist ja char laut MSDN gleichzusetzen mit signed char. Ist das bei Pointern anders? Oder ist char - wie ich in einem anderen Post gelesen habe - "nicht eindeutig festgelegt"?

    Ich habe nämlich eine Klasse mit überladenen Methoden der Form:

    Out(const unsigned char* pOut, <weitere Params>);
    Out(const signed char* pOut, <weitere Params>);
    Out(const char* pOut, <weitere Params>);
    

    und habe eigentlich damit gerechnet, dass die letztere und die mittlere der beiden sich nicht unterscheiden würden (Fehler: "mehrdeutiger Aufruf ...").

    Allerdings geht folgendes ohne diesen Fehler:

    unsigned char *unsCHAR;
    signed char *sCHAR;
    char *CHAR;
    
    A.Out(unsCHAR);
    A.Out(sCHAR);
    A.Out(CHAR);
    

    Wenn ich nun aber wirklich einen signed char-String ausgeben will, müsste ich ja folgendes schreiben:

    signed char Var[7] = "Hallo.";
    
    A.Out(Var);
    

    Komischerweise wird dann nicht Out(const signed char*), sondern Out(const char 😉 aufgerufen! 😕

    Sorry für die lange Post, aber ich hoffe, jemand kann mir da auf die Sprünge helfen.


Anmelden zum Antworten