表达式必须有一个恒定值误差C ++

可能重复:
有没有一种方法来初始化与非恒定的数组变量? (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]; } }

我收到就行了一个错误“VEC2 vPoints [myLines];” 上面写着表达式必须有一个恒定值。 我不明白为什么我得到这个错误,任何帮助吗?

是不是因为myLines可能是负面的? IDK的。

--------------解决方案-------------

vec2 vPoints[myLines];

由于myLines不是一个常量表达式((这意味着,它不是在编译时知道),所以上面的代码声明这是不是在C不允许++可变长度的数组。只有C99有这个功能。你的编译器可能有这个作为扩展名(但不是标准C ++)。

这样的黎民问题的解决方法是:使用std::vector<T>为:

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

现在应该工作。

是不是因为myLines可能是负面的?
不,这是因为myLines不是编译时间常数。

说明:

vec2 vPoints[myLines];

创建可变长度,其中的阵列myLines值将在运行时被确定。 可变长度数组不是在C不允许++ 这是在C99引入的功能,和C ++标准不支持它。 一些C ++编译器支持它作为一个扩展,虽然但它仍然是不符合标准的。

对于C ++阵列的大小应在编译时已知的,并且因此必须是编译时间常数。 myLines不是编译时间常数并且因此错误。

你应该使用一个 std :: 矢量

vec2 vPoints[myLines];

数组的大小必须是一个编译时间常数。 myLines不是编译时间常数。 相反, 使用新的或更好的使用分配内存std::vector

C ++没有变长数组。 阵列大小必须在编译时来确定。 值myLines只知道在运行,所以这是行不通的。

有数组,其大小只在运行时已知的,使用std::vector

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

你得到的错误,因为静态数组需要一个静态的(常量)的大小。 由于组件在数vPoints是动态的,可以考虑使用一个动态数组来代替。 或者更好的是坚持使用vector

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.132 (s). 10 q(s)