在g ++编译器中,我的程序运行正常,但是在CC编译器中,我收到错误。
以下行:Shape s[atoi(argv[1])];
给出错误:
error:数组下标运算符中需要一个整型常量表达式。
然后,我尝试将其更改为:int i = atoi(argv[1]);
后跟Shape s[i];
,但我仍然遇到同样的错误。
我需要argv [1]因为它从命令行获取了多少个形状。
例如./program 10
它应该Team s[10];
如何让argv []与CC编译器一起使用?
答案 0 :(得分:2)
团队[10];
会在堆栈上创建数组,但只有当size是常量表达式时才有可能。如果您需要动态数组,则必须通过调用new[]
int size = atoi( argv[1]);
Team* s = new Team[ size];
首选std::vector<Team> tv(size);
,这将简化内存管理(毕竟,迟早,你必须学习STL库,从今天开始)。
答案 1 :(得分:1)
对于数组,指定的大小必须是常量。所以你可以这样做:
Team s[10];
你不能这样做:
int size = 10;
Team s[size];
相反,你必须这样做:
int size = 10;
Team* s = new Team[size];
// do stuff
delete[] s;
答案 2 :(得分:1)
在标准C ++中,数组的大小必须是编译时常量。 GCC允许可变长度数组作为非标准扩展;其他编译器没有。
为了便携地执行此操作,您需要动态分配的数组:
#include <memory>
std::vector<Shape> s(atoi(argv[1]));