1

知道为什么会在这里发生吗?

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 ) );

我没有错误。

4

1 回答 1

4

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

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

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

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

于 2013-07-02T01:26:02.260 回答