Ошибка C2057: ожидаемое постоянное выражение

Делаю некоторые AudioDSP в VC++ 2012 и у меня проблемы с выделением памяти для буфера

int size = input.getSize();
float buf[size];

При компиляции я получаю ошибку "ошибка C2057: ожидаемое константное выражение" Похоже, код работает на C99, а не на C++. Есть идеи как обойти это?

1 ответ

Это связано с тем, что C99 поддерживает массивы переменной длины, а C++ - нет (по крайней мере, не C++98 и не C++11). Вот некоторые обходные пути:

  • Рефакторинг вашего кода для использования std::vector или любой подходящий контейнер. Если возможно, это будет предпочтительным методом.

  • Найдите компилятор, который поддерживает VLA как расширение (например, GCC с опцией -std=c++gnu98 или же -std=gnu++11).

В любом случае, если у вас не так много кода для рефакторинга, пожалуйста, попробуйте изменить свой код, чтобы использовать стандартный контейнер вместо VLA.

Другие вопросы по тегам