if语句中的targets
的两个赋值引发以下错误。
error: expression must have integral or enum type
操作中的所有变量都是或返回如此声明的浮点值。但是,它不喜欢转换为整数。为什么是这样?不同类型的浮点数或整数之间有区别吗?
__global__
void generateTargets(int* targets, int targetAmount, float radius, float angleStep){
float i = blockIdx.x;
if(i < targetAmount){ // Ensure it stays in range
// Access the 1d array representation of the 2d array [MAX_TARGETS][2]
targets[i + MAX_TARGETS*0] = __float2int_rd(radius*__cosf(i*angleStep)); // X value
targets[i + MAX_TARGETS*1] = __float2int_rd(radius*__sinf(i*angleStep)); // Y value
}
}
答案 0 :(得分:4)
在targets[i + MAX_TARGETS*0]
和targets[i + MAX_TARGETS*1]
中,您使用的是i
的{{1}}。这样整个表达式来计算数组索引为float
。您不能执行此操作,因为数组索引必须是整数类型(没有元素4.5)。
如果要保留float
和i
,则需要将其强制转换/转换为“整数类型”,或者将表达式的结果强制转换/转换为整数类型。