C++;获取错误C2440 您好,我使用Visual Studio C++ 2010
我对此代码有问题(取自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++不自动将代码>空* > /代码>转换为不同的指针类型。因此,您必须强制转换返回值: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
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;