我想编译一个我知道可行的项目。
所以我创建了一个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 ++
答案 0 :(得分:8)
与C ++中的C相反,您可能不会将类型为void *的指针分配给任何其他类型的指针,因为这样的赋值是不安全的。您必须使用C或C ++形式的转换将指针显式转换为所需类型。
例如
LIMITOR_3DSL_Limitor_32f *ppStatus = ( LIMITOR_3DSL_Limitor_32f * )ippMalloc( sizeof(LIMITOR_3DSL_Limitor_32f ) );
或
LIMITOR_3DSL_Limitor_32f *ppStatus = static_cast<LIMITOR_3DSL_Limitor_32f*>( ippMalloc(sizeof(LIMITOR_3DSL_Limitor_32f ) ) );
答案 1 :(得分:0)
LIMITOR_3DSL_Limitor_32f* ppStatus = (LIMITOR_3DSL_Limitor_32f*)ippMalloc(sizeof(LIMITOR_3DSL_Limitor_32f));
在C / C ++中,我们应该明确地转换类型。 ippMalloc将返回void *
指针,因此我们应该将其从void *
转换为LIMITOR_3DSL_Limitor_32f*