OpenCL использует C правила области видимости. Это означает, что если вы объявляете переменную внутри блока { ... }
, переменная существует только в этом блоке.
Таким образом, правильный способ написать тип кода, который вы пытаетесь написать:
if (whatever)
{
float pyramid_1; // declare the variable here
if (condition1) {
pyramid_1 = expression1; // assign a value here…
}
else if (condition2) {
{
pyramid_1 = expression2; // …and here…
}
// etc.
/* You can use the result of computing pyramid_1's value here, as
* we're still inside the same { } block it was declared in. */
// …
}
Обязательно удалите спецификатор типа float
внутри ваших блоков if
/ else if
, чтобы эти операторы назначений . Если вы этого не сделаете, вы просто объявите новые переменные с тем же именем , которое было объявлено вне этих блоков. (Это называется затенением и обычно плохой идеей - в этом случае внешняя переменная никогда не будет обновлена.)