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.