关于数组:表达式在c ++中必须有一个常量值错误

expression must have a constant value error in c++

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is there a way to initialize an array with non-constant variables? (C++)

我有以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vector<vector<vec2>> vinciP;
    int myLines = -1;
    myLines = drawPolyLineFile("vinci.dat", vinciP);
    if (myLines > -1)
    {
        cout <<"

SUCCESS"
;
        vec2 vPoints[myLines];
        for (int i = 0; i < NumPoints; ++i)
        {
            vPoints[i] = vinciP[0][i];
        }
    }

我在"vec2 vpoints[mylines]行中得到一个错误,这表示表达式必须有一个常量值。我不明白为什么会有这个错误,有什么帮助吗?

是因为我的线可能是负数吗?IDK。


1
vec2 vPoints[myLines];

因为EDCOX1的0Ω不是一个const表达式(也就是说,它在编译时不知道),所以上面的代码声明了一个在C++中不允许的可变长度数组。只有C99具有此功能。编译器可能将此作为扩展(但不是标准C++)。

这种常见问题的解决办法是:使用std::vector作为:

1
std::vector<vec2> vPoints(myLines);

现在应该可以了。


是因为我的线可能是负数吗?不,这是因为myLines不是编译时常量。

说明:

1
vec2 vPoints[myLines];

创建一个可变长度的数组,其中myLines值将在运行时确定。在C++中不允许使用可变长度数组。这是C99中引入的一个特性,C++标准不支持它。一些C++编译器支持它作为一个扩展,但它仍然是非标准的一致性。

对于C++,数组的大小应该在编译时知道,因此必须是编译时常数。myLines不是编译时常量,因此是错误。

你应该使用一个STD::向量


因为静态数组需要一个静态(常量)大小,所以会出现这个错误。由于vPoints中的组件数量是动态的,因此考虑使用动态数组。或者最好还是坚持使用vector


C++没有可变长度数组。数组的大小必须在编译时确定。EDOCX1的值(0)只在运行时知道,因此这不起作用。

要使数组只有在运行时才知道其大小,请使用std::vector

1
std::vector<vec2> vPoints(myLines);


1
vec2 vPoints[myLines];

数组大小必须是编译时常量。myLines不是编译时常量。相反,使用新的甚至更好的内存分配来使用std::vector