1

这是我试图编译以查找原始根的代码......但它给了我错误。

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* 的无效转换行中。

4

1 回答 1

3

问题几乎可以肯定是在 C 代码上使用 C++ 编译器。在 Cvoid*中可以在没有强制转换的情况下转换为任何指针类型,而在 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)

于 2012-04-25T07:53:18.263 回答