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++)。
这种常见问题的解决办法是:使用
1 | std::vector<vec2> vPoints(myLines); |
号
现在应该可以了。
是因为我的线可能是负数吗?不,这是因为
说明:
1 | vec2 vPoints[myLines]; |
创建一个可变长度的数组,其中
对于C++,数组的大小应该在编译时知道,因此必须是编译时常数。
你应该使用一个STD::向量
因为静态数组需要一个静态(常量)大小,所以会出现这个错误。由于
C++没有可变长度数组。数组的大小必须在编译时确定。EDOCX1的值(0)只在运行时知道,因此这不起作用。
要使数组只有在运行时才知道其大小,请使用
1 | std::vector<vec2> vPoints(myLines); |
号
1 | vec2 vPoints[myLines]; |
数组大小必须是编译时常量。