gpt4 book ai didi

c++ - Cuda, device, expression 必须有整型或枚举类型

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:30 25 4
gpt4 key购买 nike

在if语句中对targets的两次赋值会抛出如下错误

error: expression must have integral or enum type

操作中的所有变量都是或返回浮点值,因为它们被声明为浮点值。但它不喜欢转换为整数。为什么是这样?不同种类的 float 或整数之间有区别吗?

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

最佳答案

targets[i + MAX_TARGETS*0]targets[i + MAX_TARGETS*1] 中,您使用的是 i float 。这使得计算数组索引的整个表达式成为 float。你不能这样做,因为数组索引必须是整数类型(没有元素 4.5)。

如果你想保持 ifloat,你需要将它强制转换/转换为 `integer 类型,或者将表达式的结果强制转换/转换为整数类型。

关于c++ - Cuda, device, expression 必须有整型或枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51479660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com