这是我试图编译的代码,用于查找原始根...但它给出了错误。
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);
行
//错误无效转换从void *到double *来了。
答案 0 :(得分:3)
问题几乎可以肯定是在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)
)