2013-07-02 1058 views
0

任何想法为什么会发生这种情况?错误:无法将类型“void *”的值分配给类型为“float *”的实体

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

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

的错误是

​​

我应该做的强制转换?假的事情是我在程序的其他地方做了同样的事情,并且没有显示错误。

我有这样的一个结构的一部分,我命名为票面

long *tbegin; 

,然后我做

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

而且我没有得到任何错误。

回答

1

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

它你打算用C语言编写代码,确保将它编译为C.它打算用C++编写代码,你必须使用明确的类型转换操作符来将void *指针转换为其他指针类型。

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

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

+0

奇怪的是,它适用于另一种情况。我一直在使用gcc进行编译,但现在我使用nvcc,因为我在Cuda中有一部分代码。难道是nvcc使用gcc的情况下工作和nvcc它不工作? – Atirag

+0

@Atirag:“其他情况”在哪里?相同的文件?其他文件?正如我上面所说的,语言的选择是基于每个文件进行的,这就是为什么它可以轻松地在一个文件中编译(编译为C)并且无法在另一个文件(编译为C++)中工作。什么是您的文件的扩展名? '.c'? '.cpp'?还有别的吗?你为每个文件传递给编译器的命令行开关是什么? – AnT

+0

单独的文件。另一种情况是在.c文件中,错误情况在.cu文件中,所以我想就是这样。非常感谢。 – Atirag

相关问题