表达式必须在c ++中具有常量值错误

y3d*_*3di 9 c++ arrays vector visual-studio

可能重复:
有没有办法用非常量变量初始化数组?(C++)

我有以下代码:

vector<vector<vec2>> vinciP;
    int myLines = -1;
    myLines = drawPolyLineFile("vinci.dat", vinciP);
    if (myLines > -1)
    {
        cout << "\n\nSUCCESS";
        vec2 vPoints[myLines];
        for (int i = 0; i < NumPoints; ++i)
        {
            vPoints[i] = vinciP[0][i];
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在"vec2 vPoints [myLines]"行上收到错误.表示表达式必须具有常量值.我不明白为什么我会收到这个错误,有什么帮助吗?

是因为myLines可能是负面的吗?IDK的.

Naw*_*waz 13

vec2 vPoints[myLines];
Run Code Online (Sandbox Code Playgroud)

由于myLines不是const表达式((这意味着它在编译时不可知),所以上面的代码声明了一个C++中不允许的可变长度数组.只有C99具有此功能.您的编译器可能将此作为扩展(但这不是标准C++).

这种共同问题的解决方案是:std::vector<T>用作:

std::vector<vec2> vPoints(myLines);
Run Code Online (Sandbox Code Playgroud)

它现在应该工作.


Alo*_*ave 5

是因为myLines可能是负面的吗?
不,这是因为myLines它不是编译时常量.

说明:

vec2 vPoints[myLines];
Run Code Online (Sandbox Code Playgroud)

创建一个可变长度的数组,其中myLinesvalue将在运行时确定. C++中不允许使用可变长度数组.这是C99中引入的一个功能,而C++标准不支持它.一些C++编译器支持它作为扩展,但它仍然是非标准的符合.

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

你应该使用std :: vector