我正在尝试做这样的事情:
const int array_size = 5;
string stuff[array_size];
我的编译器不会让我编译它,即使它array_size
是一个常量。有没有办法在不处理动态数组的情况下做到这一点?
编辑:“错误 C2057:预期的常量表达式”
假设您使用 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 中定义文件范围数组,则可以使用 anenum
来命名常量值。然后enum
可用于调整数组定义的大小。然而,这对于 C++ 来说不是必需的,它允许使用const
由字面量初始化的整数类型来确定数组声明的大小。
enum { size = 5 };
int x[size];
int main () { return 0; }
Only thing I can think of is that you defined another array_size
variable in your code, which is not a compile time constant and hides the original array_size
.
#define array_size 5
string stuff[array_size];
您可以使用例如 avector
或new
关键字来动态分配内存,因为声明的数组不能具有运行时大小。
array_size
不被视为编译时间常数。添加的常量只是确保程序员不能修改它。如果试图不小心修改,编译器会引起你的注意。
数组的大小需要是编译常量。似乎您的编译器不支持Variable Length Array。您可以#define
改为将数组的大小视为常量表达式。