我正在尝试做这样的事情:
const int array_size = 5;
string stuff[array_size];
即使array_size
是常量,我的编译器也不会让我编译它。有没有办法在不处理动态数组的情况下做到这一点?
编辑:“错误C2057:预期的常量表达”
答案 0 :(得分:5)
我已经回答了这个问题,假设您要么使用C或C ++进行编码。如果您使用的是其他语言,则此答案不适用。但是,您应该使用您尝试使用的语言更新问题。
考虑以下计划:
int main () {
const int size = 5;
int x[size];
return 0;
}
这将在C ++和C.99中编译,但不能在C.89中编译。在C.99中,引入了可变长度数组,因此局部范围的数组可以采用由变量指定的大小。但是,C.99中文件范围的数组不能采用可变大小参数,而在C.89中,所有数组定义都必须具有非可变大小。
如果您使用C.89,或在C.99中定义文件范围数组,则可以使用enum
来命名常量值。然后可以使用enum
来调整数组定义的大小。但这对于C ++来说不是必需的,它允许使用由文字初始化的const
整数类型来调整数组声明的大小。
enum { size = 5 };
int x[size];
int main () { return 0; }
答案 1 :(得分:0)
#define array_size 5
string stuff[array_size];
答案 2 :(得分:0)
您可以使用例如vector
或new
关键字动态分配内存,因为声明的数组不能具有运行时大小。
答案 3 :(得分:0)
我唯一能想到的是你在代码中定义了另一个array_size
变量,它不是编译时常量并且隐藏了原始的array_size
。
答案 4 :(得分:-1)
array_size
不被视为编译时常量。添加的Constness只是确保程序员无法修改它。如果试图意外修改,编译器会引起你的注意。
数组的大小需要是编译常量。好像您的编译器不支持Variable Length Array。您可以#define
数组的大小,而不是被视为常量表达式。