Ошибка при работе с элементами массива: invalid types 'float*[float]' for array subscript

При работе с элементами массива возникает ошибка компиляции:

error: invalid types 'float*[float]' for array subscript

Выжимка из кода:

float decide(float x, float y);

int main()
{
    float *arr = new float[cy * cx];
    int i;
    float r, w;
    ...
    arr[i] = decide(arr[w], arr[r]); // ошибка
    ...
}

Ответы (1 шт):

Автор решения: αλεχολυτ

Для индексации массива нужно использовать целочисленный тип, а не вещественный.

В разных компиляторах такая ошибка диагностируется с различными сообщениями:

  • Clang:

    error: array subscript is not an integer
    
  • GCC:

    invalid types 'int [N][double]' for array subscript
    
  • MSVC:

    error C2108: subscript is not of integral type`
    

Если возникает необходимость опираться на значение вещественной переменной в качестве индекса массива, то такое значение нужно так или иначе привести к целочисленному. Самый простой вариант использовать приведение типа, например:

arr[static_cast<int>(w)]

Или другие более подходящие под задачу варианты, в частности округление через std::lround и т.д.

→ Ссылка