编译错误:在C / C ++中抛出void *失败

时间:2015-05-20 13:07:08

标签: 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));
                                                      ^

奇怪的是,无法施展虚空*真的很奇怪? 编译器可以成为问题吗?我正在使用g ++

2 个答案:

答案 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*