2017-06-05 15 views
1

エラーthatsのコードに「という表現は、整数または列挙型でなければならない」:エラーthatsのコードに「という表現は、整数または列挙型でなければならない」:

__global__ void VectorKernel(float *a, float *b, float *c, int n) 
{ 
    int i = threadIdx.x; 
    float y = 0, z = 0; 

if (i < n) 

    y = (b-a)/n; 

    for (float j = y; j <= n ; j++) { 
     z = (((j+y) - j)/6) * function(j) + 4 * (function((j + (y+j))/2)) + function(y+j); 

     c = c + z; 
    } 
} 

エラーがストレッチで、「Z」に起こる:

c = c + z; 

(私はCUDAプログラミングの初心者です)

+5

'c'は**ポインタ**です。ポインターに 'float'量の' z'を加えてはいけません。多分あなたは '* c = * c + z;'を意味していたでしょう。これはCプログラミング上の問題であり、CUDA特有の問題ではありません。 'b'と' a'もポインタなので、 '(b-a)'のようなものは本当にあなたが望むものではないようです。 –

+0

ありがとうございます! 変数をGPUに移動する部分を歳差運動のために投稿しません。 –

答えて

4

cがポインタです。ポインタ演算にはポインタと整数型の式が必要です。

あなたはfloatzを追加したい場合は、に式を変更する必要がありcで指さ:あなたはc = c + zを書いて、このようなエラーが出る場合は

*c = *c + z; 
+1

またはコンパクトさのために '* c + = z;' –

0

、あなたのタイプが一致していません疑う必要があります。 cfloat *であり、zfloatであり、割り当て不可能である。あなたが書いたと思います。その場合には、cが指し示すあなたはおそらく何をしたいのか

は、メモリ位置に*c + zの結果を格納している: *c = *c + z

関連する問題