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); // error invalid conversion from void* to double* が来ます。

4

1 に答える 1

3

問題は、ほぼ確実に、CコードでC++コンパイラを使用していることです。Cvoid*では、キャストなしで任意のポインタタイプに変換できますが、C ++ではそうではないため、エラーメッセージが表示されます。基本的に2つの解決策があります。Cコンパイラを使用するか(たとえばgccg++、または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 に答える