В компиляторе g ++ моя программа работает отлично, однако в компиляторе CC я получаю сообщение об ошибке.
Следующая строка: Shape s[atoi(argv[1])];
выдает ошибку:
ошибка: целочисленное константное выражение требуется в операторе индексации массива.
Затем я попытался изменить его на: int i = atoi(argv[1]);
с последующим Shape s[i];
, но я все еще получаю ту же ошибку.
Мне нужен argv [1], потому что он получает из командной строки, сколько фигур нужно сделать.
например ./программа 10
Должно сделать Team s[10];
Как мне заставить argv [] работать с компилятором CC?
Для массивов указанный размер должен быть постоянным. Итак, пока вы можете сделать это:
Team s[10];
Ты не сможешь это сделать:
int size = 10;
Team s[size];
Вместо этого вы должны сделать это:
int size = 10;
Team* s = new Team[size];
// do stuff
delete[] s;
Команда с [10];
создаст массив в стеке, но это возможно, только если размер является константным выражением. Если вы хотите динамический массив, то вы должны создать массив динамически с вызовом new[]
int size = atoi( argv[1]);
Team* s = new Team[ size];
предпочитать std::vector<Team> tv(size);
это облегчит управление памятью (и, в конце концов, рано или поздно вам придется изучать библиотеку STL, начните сегодня).
В стандартном C ++ размер массива должен быть константой времени компиляции. GCC допускает использование массивов переменной длины как нестандартного расширения; другие компиляторы этого не делают.
Для этого вам понадобится динамически распределенный массив:
#include <memory>
std::vector<Shape> s(atoi(argv[1]));