错误:无法将类型为“void *”的值分配给“float *”类型的实体

时间:2013-07-02 01:15:25

标签: c casting calloc

知道为什么会发生这种情况?

float *image;
long size_img=par->N*par->M;

image = calloc(size_img, sizeof(float));//the compiler shows error here

错误是

error: a value of type "void *" cannot be assigned to an entity of type "float *"

我应该演员吗?虚假的是我在程序的其他地方做同样的事情并且没有显示错误。

我将此作为名为par

的结构的一部分
long *tbegin;

然后我做

par->tbegin = calloc( SUMA_J, sizeof ( long ) );

我没有错误。

1 个答案:

答案 0 :(得分:3)

这里发生的事情很可能是您无意中将代码编译为C ++代码。在C ++中(与C相反)void *不能隐式转换为其他指针类型。

您打算用C编写代码,确保将其编译为C.如果您打算用C ++编写代码,则必须使用显式类型转换运算符将void *指针转换为其他指针类型。

转换为long *指针类型可能发生在其他翻译单元(即其他文件)中,编译为C.这可能就是它成功的原因。

请注意,编译器可以为每个翻译单元独立使用C和C ++模式。许多编译器将根据文件扩展名在C和C ++之间进行选择,将.c文件编译为C,将.cpp文件编译为C ++。