C++ erreur C2440
Bonjour, je suis à l'aide de Visual Studio c++ 2010
Je vais avoir un problème avec ce code ( il est pris à partir du langage 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;
}
J'ai ces erreurs :
error C2440: 'initialisation' : impossible de convertir de 'void *' to 'MEMBLOCK *' error C2440: '=' : impossible de convertir de 'PVOID' à 'unsigned char *' error C2440: '=' : impossible de convertir de 'void *' to 'unsigned char *'
Je suis un peu newbie. Pouvez vous s'il vous plaît fournir un converti de code de ce qui fonctionne réellement avec le c++.
Merci
- Si vous essayez de compiler du code C, utiliser un compilateur C.
- malloc retour
void*
vous avez besoin de convertir explicitement àMEMBLOCK*
. Comme ceMEMBLOCK *mb = (MEMBLOCK*)malloc(sizeof(MEMBLOCK));
ou mieuxMEMBLOCK *mb = static_cast<MEMBLOCK*>(malloc(sizeof(MEMBLOCK)));
MEMBLOCK *mb = (MEMBLOCK*)malloc(sizeof(MEMBLOCK));
ou/TC
option
Vous devez vous connecter pour publier un commentaire.
En C++, Vous ne pouvez pas affecter un pointeur de type
void *
à un pointeur d'un autre type. Ainsi, par exemple, au lieu d'écrireVous devez écrire
Aussi, vous avez à changer les autres états où il y a le même problème. Il semble que ces déclarations sont
C'est un bon exemple de ce que vous toujours devez utiliser un cast explicite, même dans C. Qui rend le code plus sûr et clair.
void *
en C n'est ni sûr ni plus clair, c'est complètement superflu. Le seul avantage est polyglottism.Puisque vous êtes à la programmation en C++, vous ne devez pas utiliser l'ancienne fonction C
malloc
. Au lieu de cela, je vous recommande d'utiliser le C++new
construire:malloc()
retournevoid*
, et C++ ne prend pas automatiquement convertivoid*
à un autre type de pointeur. Donc, vous avez à jeter la valeur de retour:Essayer:
malloc
.