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)
它现在应该工作.
是因为myLines可能是负面的吗?
不,这是因为myLines
它不是编译时常量.
说明:
vec2 vPoints[myLines];
Run Code Online (Sandbox Code Playgroud)
创建一个可变长度的数组,其中myLines
value将在运行时确定.
C++中不允许使用可变长度数组.这是C99中引入的一个功能,而C++标准不支持它.一些C++编译器支持它作为扩展,但它仍然是非标准的符合.
对于C++,数组的大小应该在编译时知道,因此必须是编译时常量.myLines
不是编译时常量,因此是错误.
你应该使用std :: vector
归档时间: |
|
查看次数: |
44941 次 |
最近记录: |