这是我试图编译的代码,用来查找原语root...but,它给我的错误是。
int isPrimitive (int q, int a) {
int i,z;
double k,s;
s=1;
i=0;
double *factors=malloc(sizeof(double)*q-2);
while (s>0 && i<q-2) {
k=pow(a,i);
s=k-(q*floor(k/q));
for (z=0;z<(sizeof(*factors)/sizeof(factors[0]));z++) {
if (factors[z]==s) {
return 0;
}
}
factors[i]=s;
i++;
}在这里的代码行double *factors=malloc(sizeof(double)*q-2); // error中,出现了从void*到double*的无效转换。
发布于 2012-04-25 15:53:18
这个问题几乎可以肯定是在C代码上使用C++编译器。在C中,void*可以在没有强制转换的情况下转换为任何指针类型,而在C++中并非如此,因此出现了错误消息。基本上有两种解决方案:使用C编译器(例如,gcc而不是g++),或者强制转换malloc的结果。
后者可以通过以下方式完成:
double *factors = static_cast<double*> (malloc(sizeof(double)*(q-2)));但是,如果您实际上是在编写C++,那么使用new []语法会更好:
double *factors = new double [q-2];(请注意,这需要使用delete[] factors而不是free(factors))
https://stackoverflow.com/questions/10311251
复制相似问题