Использование argv[] в компиляторе CC для C++

В компиляторе g++ моя программа работает отлично, однако в компиляторе CC я получаю сообщение об ошибке.

Следующая строка: Shape s[atoi(argv[1])]; выдает ошибку: ошибка: в операторе индекса массива требуется целочисленное константное выражение.

Затем я попытался изменить его на: int i = atoi(argv[1]); с последующим Shape s[i];, но я все еще получаю ту же ошибку.

Мне нужен argv[1], потому что он получает из командной строки, сколько фигур нужно сделать. напр./ программа 10 Team s[10];

Как мне заставить argv[] работать с компилятором CC?

3 ответа

Решение

Для массивов указанный размер должен быть постоянным. Итак, пока вы можете сделать это:

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]));
Другие вопросы по тегам