Почему возникает ошибка компилятора при объявлении массива с размером как целочисленная переменная?

В Visual Studio у меня ошибка, которой раньше не было в Dev-C ++:

int project = (rand() % 5) + 1 ;
int P[project][3];

Компиляция:

ошибка C2057: ожидаемое постоянное выражение
ошибка C2466: невозможно выделить массив постоянного размера 0
ошибка C2133: 'P': неизвестный размер

Можете ли вы помочь разобраться в этой ошибке?


person usertfwr    schedule 18.03.2013    source источник


Ответы (3)


В этом случае вам необходимо динамически распределять память. Итак, вы не можете сказать int P[someVariable]. Вам нужно использовать int *mem = new int[someVariable]

Взгляните на эту ссылку.

person Mert Akcakaya    schedule 18.03.2013

В C ++ вы можете создавать только массивы, размер которых является константой времени компиляции.
Размер массива P должен быть известен во время компиляции, и он должен быть константой, компилятор предупреждает вас об этом с помощью диагностических сообщений.

Почему разные результаты на разных компиляторах?

Большинство компиляторов позволяют создавать массивы переменной длины с помощью расширений компилятора, но это нестандартно, и такое использование сделает вашу программу непереносимой между различными реализациями компилятора. Это то, что вы испытываете.

person Alok Save    schedule 18.03.2013
comment
что ж, некоторые компиляторы поддерживают это, но это определенно расширение (см. stackoverflow .com / questions / 1204521 / dynamic-array-in-stack). - person Philipp Aumayr; 18.03.2013

Стандартный класс C ++ для массивов переменной длины - std::vector. В этом случае вы получите std::vector<int> P[3]; P[0].resize(project); P[1].resize(project); P[2].resize(project);

person MSalters    schedule 18.03.2013