2017-06-05 2552 views
1

错误“表达式必须具有整数或枚举类型”在这就是代码:在“Z”错误“表达式必须具有整数或枚举类型”在这就是代码:

__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; 
    } 
} 

错误发生,在拉伸:

c = c + z; 

(我在CUDA编程初学者)

+5

'c'是一个**指针**。你不应该把'z',一个'float'的数量加到指针上。也许你的意思是'* c = * c + z;'。这是一个C编程问题,不是CUDA特有的。 'b'和'a'也是指针,所以在我看来''(b-a)'不是你想要的东西。 –

+0

谢谢! 我不会发布我将变量移动到GPU进行处理的部分。 –

回答

4
c

是一个指针。指针运算需要一个指针和一个整型表达式。

如果你想添加zfloat指向c你应该改变的表达式:

*c = *c + z; 
+1

或'* c + = z;'为了紧凑。 –

0

当你写c = c + z,并获得类似这样的错误,你应该怀疑你的类型不匹配。 cfloat *z是不可分配的float

什么你可能想要做的是*c + z结果存储在内存位置指向由c,在这种情况下,你会写: *c = *c + z

相关问题