这是我试图编译的代码,用于查找原始根...但它给了我错误。
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* 的转换无效。
几乎可以肯定,问题在于在 C 代码上使用 C++ 编译器。在 C 中,void*
可以转换为任何没有强制转换的指针类型,而在C++中并非如此,因此会出现错误消息。基本上有两种解决方案:使用 C 编译器(例如 gcc
而不是g++
),或投射马洛克的结果。
后者可以通过以下方式完成:
double *factors = static_cast<double*> (malloc(sizeof(double)*(q-2)));
但是如果你实际上是在写C++,那么使用 new []
语法会更好:
double *factors = new double [q-2];
(请注意,这需要使用delete[] factors
而不是free(factors)
)