0

在 g++ 编译器中,我的程序运行良好,但是,在 CC 编译器中,我得到一个错误。

以下行:Shape s[atoi(argv[1])];给出错误:错误:数组下标运算符中需要整数常量表达式。

然后,我尝试将其更改为:int i = atoi(argv[1]);后跟Shape s[i];,但我仍然得到同样的错误。

我需要 argv[1] 因为它从命令行获取要制作多少个形状。例如 ./program 10 它应该使Team s[10];

如何让 argv[] 与 CC 编译器一起工作?

4

3 回答 3

2

小队[10];

将在堆栈上创建数组,但这只有在 size 是常量表达式时才有可能。如果你想要动态数组,那么你必须通过调用动态创建数组new[]

int size = atoi( argv[1]);
Team* s = new Team[ size];

更喜欢std::vector<Team> tv(size);这样可以简化内存管理(毕竟,迟早你必须学习 STL 库,从今天开始)。

于 2014-09-26T11:59:26.890 回答
1

对于数组,指定的大小必须是常数。所以虽然你可以这样做:

Team s[10];

你不能做这个:

int size = 10;
Team s[size];

相反,您必须这样做:

int size = 10;
Team* s = new Team[size];
// do stuff
delete[] s;
于 2014-09-26T12:04:10.583 回答
1

在标准 C++ 中,数组的大小必须是编译时常量。GCC 允许变长数组作为非标准扩展;其他编译器没有。

要便携地执行此操作,您需要动态分配的数组:

#include <memory>

std::vector<Shape> s(atoi(argv[1]));
于 2014-09-26T12:04:25.953 回答