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

302
29 апреля 2022, 17:20

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

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]); // ошибка
    ...
}
Answer 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 и т.д.

READ ALSO
Не могу собрать и установит gRPC c++

Не могу собрать и установит gRPC c++

Пытаюсь собрать grpс с помощью cmakeПроект нормально собирается, но на этапе установке с помощью make install выдает ошибку

230
Для чего нужен логический оператор || и &amp;&amp;?

Для чего нужен логический оператор || и &&?

Для чего нужны эти операторы, если побитовые |, & справляются с этим?

148
Переопределение операции ++ c++

Переопределение операции ++ c++

не получается сделать переопределение ++ как движение по спискуПомогите пожалуйста исправить проблему

281