При работе с элементами массива возникает ошибка компиляции:
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]); // ошибка
...
}
Для индексации массива нужно использовать целочисленный тип, а не вещественный.
В разных компиляторах такая ошибка диагностируется с различными сообщениями:
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
и т.д.
Пытаюсь собрать grpс с помощью cmakeПроект нормально собирается, но на этапе установке с помощью make install выдает ошибку
Для чего нужны эти операторы, если побитовые |, & справляются с этим?
не получается сделать переопределение ++ как движение по спискуПомогите пожалуйста исправить проблему