C++ C++;-试图使两点的值相等时产生错误:表达式必须具有算术或枚举类型

C++ C++;-试图使两点的值相等时产生错误:表达式必须具有算术或枚举类型,c++,pointers,types,cuda,C++,Pointers,Types,Cuda,当我尝试使用nvcc-c编译my.cu文件时,出现以下错误: mag_cuda.cu(213):错误:表达式必须具有算术或枚举类型 此处给出的GPU将执行的功能的一部分,有问题的行: __global__// all kernels are preceded by __global__ keyword void sum_all_indv_B(int No_poles, double *B_x, double *B_y, double *B_z, double *indv_B[][3])

当我尝试使用nvcc-c编译my.cu文件时,出现以下错误:

mag_cuda.cu(213):错误:表达式必须具有算术或枚举类型

此处给出的GPU将执行的功能的一部分,有问题的行:

__global__// all kernels are preceded by __global__ keyword
  void sum_all_indv_B(int No_poles, double *B_x, double *B_y, double 
*B_z, double *indv_B[][3])
  {
    // determine thread ID within block
    int index = blockIdx.x * blockDim.x + threadIdx.x;

    // determine stride of loop (more elements in array than threads)
    int stride = blockDim.x * gridDim.x;

    //loop over all the poles
    for(int counter_1 = index; counter_1 < No_poles; counter_1+=stride)
      {
    //sum the B field contribution from all poles in x,y and z directions
    B_x += indv_B[counter_1][0];
    B_y += indv_B[counter_1][1];
    B_z += indv_B[counter_1][2];

        //Divide total by number of Poles
    B_x = B_x/No_poles;
    B_y = B_y/No_poles;
    B_z = B_z/No_poles;
      }
  }
\uuuuu global\uuuu//
无效和(整数无极点,双*B\x,双*B\y,双
*B_z,双*indv_B[][3])
{
//确定块内的线程ID
int index=blockIdx.x*blockDim.x+threadIdx.x;
//确定循环的步长(数组中的元素多于线程)
int stride=blockDim.x*gridDim.x;
//绕着所有的杆子转
对于(int counter_1=索引;counter_1<无极点;counter_1+=步幅)
{
//求x、y和z方向上所有极点的B场贡献之和
B_x+=indv_B[计数器1][0];
B_y+=indv_B[计数器1][1];
B_z+=indv_B[计数器1][2];
//将总数除以极数
B_x=B_x/无极;
B_y=B_y/无极;
B_z=B_z/无极点;
}
}
错误发生在“B_x+=indv_B[计数器1][0];”、“B_x=B_x/无_极点”和类似线路上


任何想法,因为我没有太多的指针

B_x
indv_B[I][j]
都是指向双值的指针。假设声明
double*B_x
double*indv_B[][3]
正确,使用
*B_x+=*indv_B[counter_1][0]


您还必须更改以下行:
*B_x=*B_x/No_x
indv_B[i][j]
是指向双精度
的指针。假设声明
double*indv_B[][3]
正确,使用
B_x+=*indv_B[counter_1][0]这试图添加两个指针:
B_x+=indv_B[counter_1][0]。也许你想要的是:
*B_x+=*indv_B[counter_1][0]
和其他两个类似,以及
*B_x=*B_x/No_极点,其他两个也一样。@RobertCrovella添加*有效。非常感谢您的帮助
B_x
也是指向
double
的指针。因此,将
double
数量添加到指向
double
的指针没有任何意义。这不会解决任何问题。@Gilles PhilippePaillé我现在刚试过,它抛出了另一个错误message@Aaron无论您在哪里使用
B_x
,都必须执行相同的操作。我将编辑答案。@Gilles PhilippePaillé是的,这确实解决了问题。非常感谢。