可能重复:
Is there a way to initialize an array with non-constant variables? (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];
}
}
我在线路上遇到错误&#39; vec2 vPoints [myLines];&#39;表示表达式必须具有常量值。我不明白为什么我会收到此错误,有什么帮助?
是因为myLines可能是否定的? IDK的。
答案 0 :(得分:13)
vec2 vPoints[myLines];
由于myLines
不是 const 表达式((这意味着它在编译时不可知),所以上面的代码声明了一个不允许的变长数组C ++。只有C99具有此功能。您的编译器可能将此作为扩展(但不是标准C ++)。
这种共同问题的解决方案是:使用std::vector<T>
作为:
std::vector<vec2> vPoints(myLines);
现在应该可以了。
答案 1 :(得分:5)
是因为myLines可能是否定的?
不,这是因为myLines
不是编译时常量。
<强>解释强>
vec2 vPoints[myLines];
创建一个可变长度的数组,其中myLines
值将在运行时确定。
C ++中不允许使用 Variable length arrays 。这是C99中引入的一个功能,而C ++标准不支持它。一些C ++编译器支持它作为扩展,但它仍然是非标准的符合。
对于C ++,数组的大小应该在编译时知道,因此必须是编译时常量。 myLines
不是编译时常量,因此也就是错误。
您应该使用 std :: vector
答案 2 :(得分:1)
vec2 vPoints[myLines];
数组大小必须是编译时常量。 myLines
不是编译时常量。相反,使用 new 分配内存,甚至更好地使用std::vector
。
答案 3 :(得分:1)
C ++没有可变长度数组。必须在编译时确定数组的大小。 myLines
的值仅在运行时已知,因此不起作用。
要使数组的大小仅在运行时已知,请使用std::vector
。
std::vector<vec2> vPoints(myLines);
答案 4 :(得分:1)
您收到该错误,因为静态数组需要静态(常量)大小。由于vPoints
中的组件数量是动态的,因此请考虑使用动态数组。或者更好地坚持使用vector
。