知道为什么会发生这种情况?
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 ) );
我没有错误。
答案 0 :(得分:3)
这里发生的事情很可能是您无意中将代码编译为C ++代码。在C ++中(与C相反)void *
不能隐式转换为其他指针类型。
您打算用C编写代码,确保将其编译为C.如果您打算用C ++编写代码,则必须使用显式类型转换运算符将void *
指针转换为其他指针类型。
转换为long *
指针类型可能发生在其他翻译单元(即其他文件)中,编译为C.这可能就是它成功的原因。
请注意,编译器可以为每个翻译单元独立使用C和C ++模式。许多编译器将根据文件扩展名在C和C ++之间进行选择,将.c
文件编译为C,将.cpp
文件编译为C ++。