Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译错误:在C/C+中强制转换void*失败+;_C++_Casting_Compilation_Makefile - Fatal编程技术网

C++ 编译错误:在C/C+中强制转换void*失败+;

C++ 编译错误:在C/C+中强制转换void*失败+;,c++,casting,compilation,makefile,C++,Casting,Compilation,Makefile,我想编译一个我知道有效的项目 因此,我创建了一个Makefile来编译它,但当我创建它时,出现了以下错误: invalid conversion from ‘void*’ to ‘LIMITOR_3DSL_Limitor_32f* {aka LIMITOR_3DSL_Limitor_32f_tag*}’ [-fpermissive] *ppStatus = ippMalloc(sizeof(LIMITOR_3DSL_Limitor_32f));

我想编译一个我知道有效的项目

因此,我创建了一个Makefile来编译它,但当我创建它时,出现了以下错误:

invalid conversion from ‘void*’ to ‘LIMITOR_3DSL_Limitor_32f* {aka LIMITOR_3DSL_Limitor_32f_tag*}’ [-fpermissive]
*ppStatus = ippMalloc(sizeof(LIMITOR_3DSL_Limitor_32f));
                                                      ^
真奇怪,一个空洞怎么会不能被铸造?
编译器可能是问题所在吗?我使用的是g++< /p> 在C++中与C相反,你可能不会将一个类型的空洞指针指派给任何其他类型的指针,因为这样的赋值是不安全的。必须使用C或C++的铸造形式将指针显式地转换为所需类型。

比如说

LIMITOR_3DSL_Limitor_32f *ppStatus = ( LIMITOR_3DSL_Limitor_32f * )ippMalloc( sizeof(LIMITOR_3DSL_Limitor_32f ) );

LIMITOR_3DSL_LIMITOR_32f*ppStatus=status_cast(ippMalloc(sizeof(LIMITOR_3DSL_LIMITOR_32f));

LIMITOR\u 3DSL\u LIMITOR\u 32f*ppStatus=(LIMITOR\u 3DSL\u LIMITOR\u 32f*)ippMalloc(LIMITOR\u 3DSL\u LIMITOR\u 32f*)


在C/C++中,我们应该显式地强制转换类型。ippMalloc将返回一个
void*
指针,因此我们应该将它从
void*
强制转换为
LIMITOR\u 3DSL\u LIMITOR\u 32f*

选择一种语言。这是C和C++之间的许多差异之一。此外,强制转换和隐式转换是不同的,这是错误的。禁止在C型铸造中使用
void*
(6.3.2.3/1)。在C++中是必需的。
LIMITOR_3DSL_Limitor_32f *ppStatus = static_cast<LIMITOR_3DSL_Limitor_32f*>( ippMalloc(sizeof(LIMITOR_3DSL_Limitor_32f ) ) );