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