[英]Cuda, device, expression must have integral or enum type
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
}
}
在targets[i + MAX_TARGETS*0]
和targets[i + MAX_TARGETS*1]
您使用的是i
,它是float
。 這使得用於計算數組索引的整個表達式都是float
。 您不能執行此操作,因為數組索引必須是整數類型(沒有元素4.5)。
如果你想保持i
一個float
你需要轉換/它轉換成一個'整型或澆鑄/表達式的結果轉換為整數類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.