error C2440 void zu unsigned char
-
Hallo ich bastele gerade an einen kleinen programm zum ermitteln des MSB und LSB.
Ich habe mal den source mit eingefügt damit ich mein problem besser erläutern kann.
Wenn ich die Hex Adresse nach pointer2 kopieren will immer einen error C2440
Hat jemand ne Lösung oder bin ich grad nur blind
[cpp]
int main(void)
{
short int zahl, * pointer1;
void * dummy;
unsigned char * pointer2;
zahl = 0x7FED;
printf("Zahl ist: %x \n", zahl);
pointer1 = &zahl;
printf ("\npointer1 zeigt auf die Adresse: ");
printf ("%p \n", pointer1);
printf ("Der Inhalt an der Adresse pointer1 ist: %x \n", pointer1);
/*pointer konvertierung */
dummy = pointer1;
pointer2 = dummy; //error C2440
/* Ausgabe des niederwertigen Bytes/
printf ("\nAusgabe des niederwertigen Bytes:\n");
printf ("\npointer2 zeigt auf dies Adresse: %p \n", *pointer2);
printf ("Der Inhalt an der Adresse pointer2 ist: %x \n", pointer2);
pointer2 = pointer2 + 1;
printf ("\n\npointer2 wurde um 1 erhoeht \n");
/* Ausgabe des hoeherwertigen Bytes/
printf ("\nAusgabe des hoeherwertigen Bytes:\n");
printf ("\npointer2 zeigt jetzt auf die Adresse: ");
printf ("%p \n", pointer2);
printf ("Der neue Inhat an der Adresse pointer2");
printf (" ist: %x \n\n", *pointer2);return 0;
}
[cpp]
-
PrettyPrinter is back!!
Peter2355 schrieb:
int main(void) { short int zahl, * pointer1; void * dummy; unsigned char * pointer2; zahl = 0x7FED; printf("Zahl ist: %x \n", zahl); pointer1 = &zahl; printf ("\npointer1 zeigt auf die Adresse: "); printf ("%p \n", pointer1); printf ("Der Inhalt an der Adresse pointer1 ist: %x \n", *pointer1); /*pointer konvertierung */ dummy = pointer1; pointer2 = dummy; //error C2440 /* Ausgabe des niederwertigen Bytes*/ printf ("\nAusgabe des niederwertigen Bytes:\n"); printf ("\npointer2 zeigt auf dies Adresse: %p \n", *pointer2); printf ("Der Inhalt an der Adresse pointer2 ist: %x \n", *pointer2); pointer2 = pointer2 + 1; printf ("\n\npointer2 wurde um 1 erhoeht \n"); /* Ausgabe des hoeherwertigen Bytes*/ printf ("\nAusgabe des hoeherwertigen Bytes:\n"); printf ("\npointer2 zeigt jetzt auf die Adresse: "); printf ("%p \n", pointer2); printf ("Der neue Inhat an der Adresse pointer2"); printf (" ist: %x \n\n", *pointer2); return 0; }
-
Das scheint mir ein Compiler spezifischer Fehler zu sein, da der Fehler im Visual Studio und nicht im Source Code direkt liegt.
-
Der Fehler liegt wohl daran, daß er versucht, C-Code mit einem C++-Compiler zu übersetzen - in C++ sind diese impliziten Umwandlungen von void* in einen "normalen" Pointer nicht erlaubt, da benötigt man einen expliziten Cast.
-
Oder der Dateiname endet auf .cpp stattauf .c
-
DirkB schrieb:
Oder der Dateiname endet auf .cpp stattauf .c
Sollte doch generell keinen Einfluss auf den verwendeten Compiler haben, oder?
EDIT:
pointer2 = dummy;
einfach in
pointer2 = (unsigned char*)dummy;
ändern.
-
Im VisualStudio schon.
-
VS-20xx (darauf deutet der Fehler error C2440 hin) macht da schon Unterschiede.
Man kann auch in den Projekteinstellungen festlegen wie Compiliert werden soll.
-
EDIT:
pointer2 = dummy;
einfach in
pointer2 = (unsigned char*)dummy;
ändern.[/quote]
Danke @ EOutOfResources klappt perfekt.