C++;获取错误C2440 您好,我使用Visual Studio C++ 2010

C++;获取错误C2440 您好,我使用Visual Studio C++ 2010 ,c++,c,visual-c++,C++,C,Visual C++,我对此代码有问题(取自C语言代码): 我有以下错误: error C2440: 'initializing' : cannot convert from 'void *' to 'MEMBLOCK *' error C2440: '=' : cannot convert from 'PVOID' to 'unsigned char *' error C2440: '=' : cannot convert from 'void *' to 'unsigned char

我对此代码有问题(取自C语言代码):

我有以下错误:

error C2440: 'initializing' : cannot convert from 'void *' to 'MEMBLOCK *' error C2440: '=' : cannot convert from 'PVOID' to 'unsigned char *' error C2440: '=' : cannot convert from 'void *' to 'unsigned char *' 错误C2440:“正在初始化”:无法从“void*”转换为“MEMBLOCK*” 错误C2440:“=”:无法从“PVOID”转换为“unsigned char*” 错误C2440:“=”:无法从“void*”转换为“unsigned char*” 我是个新手。你能提供一个C++的转换代码吗? <谢谢>

< p> <代码> MalCube()>返回>代码> Value*/Cuff>,C++不自动将代码>空* > /代码>转换为不同的指针类型。因此,您必须强制转换返回值:

MEMBLOCK *mb = (MEMBLOCK*) malloc(sizeof(MEMBLOCK));
尝试:


<>在C++中,您可能不将类型的指针<代码>空白> /COD>指定为其他类型的指针。比如说,不要写东西

MEMBLOCK *mb = malloc(sizeof(MEMBLOCK));
你必须写作

MEMBLOCK *mb = ( MEMBLOCK * )malloc(sizeof(MEMBLOCK));
此外,您还必须更改存在相同问题的其他语句。看来这些说法是正确的

mb->addr = ( unsigned char * )meminfo->BaseAddress;
mb->buffer = ( unsigned char * )malloc(meminfo->RegionSize);

这是一个很好的例子,你在C.中使用一个显式的转换,使代码更加安全和清晰。

< P>因为你在C++中编程,你不应该使用旧的C函数<代码> Malc C <代码>。相反,我建议您使用C++ <代码>新< /COD>构造:

MEMBLOCK *mb = new MEMBLOCK;

如果您试图编译C代码,请使用C编译器。malloc return
void*
您需要显式强制转换到
MEMBLOCK*
。像这样
MEMBLOCK*mb=(MEMBLOCK*)malloc(sizeof(MEMBLOCK))或更好
MEMBLOCK*mb=static_cast(malloc(sizeof(MEMBLOCK))
MEMBLOCK*mb=(MEMBLOCK*)malloc(sizeof(MEMBLOCK))
/TC
选项您可能想说明OP为什么必须投回。因为,我们都知道,在C语言中,用C语言强制转换
void*
既不安全也不清晰,它是完全冗余的。唯一的优势是多选。
mb->addr = ( unsigned char * )meminfo->BaseAddress;
mb->buffer = ( unsigned char * )malloc(meminfo->RegionSize);
MEMBLOCK *mb = new MEMBLOCK;