C++ immer Fehler C2440
Hallo, ich bin mit Visual Studio c++ 2010
Ich habe da ein problem mit diesem code ( es ist entnommen aus der Sprache C-code ) :
MEMBLOCK* create_memblock (HANDLE hProc, MEMORY_BASIC_INFORMATION *meminfo)
{
MEMBLOCK *mb = malloc(sizeof(MEMBLOCK));
if (mb)
{
mb->hProc = hProc;
mb->addr = meminfo->BaseAddress;
mb->size = meminfo->RegionSize;
mb->buffer = malloc(meminfo->RegionSize);
mb->next = NULL;
}
return mb;
}
Ich habe diese Fehler :
error C2440: 'initializing' : cannot convert from 'void *' zu 'MEMBLOCK *' error C2440: '=' : keine Konvertierung von 'PVOID' in 'unsigned char *' error C2440: '=' : keine Konvertierung von 'void *' zu 'unsigned char *'
Ich bin ein bisschen Neuling. Können Sie bitte einen code umgewandelt, der tatsächlich funktioniert mit c++.
Danke
Wenn Sie versuchen, kompilieren von C-code, verwenden Sie einen C-compiler.
malloc zurück
malloc zurück
void*
müssen Sie explizit casten zu MEMBLOCK*
. Wie diese MEMBLOCK *mb = (MEMBLOCK*)malloc(sizeof(MEMBLOCK));
oder besser MEMBLOCK *mb = static_cast<MEMBLOCK*>(malloc(sizeof(MEMBLOCK)));
MEMBLOCK *mb = (MEMBLOCK*)malloc(sizeof(MEMBLOCK));
oder /TC
option
InformationsquelleAutor user3735032 | 2014-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C++ Sie sind nicht berechtigt, einen Zeiger vom Typ
void *
auf einen Zeiger, einige andere Typ. So zum Beispiel, statt zu schreibenSchreiben Sie
Auch Sie sich ändern müssen anderen Aussagen, wo es das gleiche problem. Es scheint, diese Aussagen sind
Es ist ein gutes Beispiel dafür, dass Sie immer sollte eine explizite Typumwandlung auch in C. Das macht den code sicher und klar.
Casting
void *
in C ist weder sicherer, noch übersichtlicher, es ist völlig überflüssig. Der einzige Vorteil ist polyglottism.InformationsquelleAutor Vlad from Moscow
Da bist du in C++ Programmieren, sollten Sie nicht verwenden die alte C-Funktion
malloc
. Stattdessen würde ich empfehlen, dass Sie die C++ -new
konstruieren:InformationsquelleAutor Some programmer dude
malloc()
zurückvoid*
- und C++ nicht automatisch umgewandeltvoid*
auf eine andere Zeiger-Typ. So haben Sie zum cast der return-Wert:Versuchen:
malloc
.InformationsquelleAutor Sava B.