0

我正在尝试做这样的事情:

const int array_size = 5;
string stuff[array_size];

我的编译器不会让我编译它,即使它array_size是一个常量。有没有办法在不处理动态数组的情况下做到这一点?

编辑:“错误 C2057:预期的常量表达式”

4

5 回答 5

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 中定义文件范围数组,则可以使用 anenum来命名常量值。然后enum可用于调整数组定义的大小。然而,这对于 C++ 来说不是必需的,它允许使用const由字面量初始化的整数类型来确定数组声明的大小。

enum { size = 5 };
int x[size];
int main () { return 0; }
于 2013-09-09T22:04:42.917 回答
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.

于 2013-09-09T23:14:41.710 回答
0
#define array_size 5
string stuff[array_size];
于 2013-09-09T21:33:15.560 回答
0

您可以使用例如 avectornew关键字来动态分配内存,因为声明的数组不能具有运行时大小。

于 2013-09-09T22:27:39.477 回答
-1

array_size不被视为编译时间常数。添加的常量只是确保程序员不能修改它。如果试图不小心修改,编译器会引起你的注意。

数组的大小需要是编译常量。似乎您的编译器不支持Variable Length Array。您可以#define改为将数组的大小视为常量表达式。

于 2013-09-09T22:31:59.530 回答