То как вы используете массив называется VLA (
Variable Length Array). Появилось только в стандарте С99. В С++ его нет в принципе.
Чтоб использовать VLA нужно компилятору явно задать используемый стандарт. Для gcc: -std=c99 или -std=c11. C11 - стандарт 2011 года.
Если вы используете компилятор от микрософт (в составе MSVS например), то могу вас опечалить - микрософт никогда не стремилась поддерживать стандарты Си. Поддержки VLA там нет и вряд ли будет в ближайшее время.
Но вообще не рекомендуется использовать VLA без четкого понимания что это, как работает и к каким последствиям может привести. Например, в свое время в ядре линукс была целая компания по выкорчевыванию кода с VLA. Так что лучше воспользуйтесь динамическими массивами или статическими с константными размерностями.