表达式在c++中必须有一个常数值错误



可能重复:
有没有一种方法可以用非常量变量初始化数组?(C++(

我有以下代码:

vector<vector<vec2>> vinciP;
    int myLines = -1;
    myLines = drawPolyLineFile("vinci.dat", vinciP);
    if (myLines > -1)
    {
        cout << "nnSUCCESS";
        vec2 vPoints[myLines];
        for (int i = 0; i < NumPoints; ++i)
        {
            vPoints[i] = vinciP[0][i];
        }
    }

我在'vec2vPoints[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::vector

vec2 vPoints[myLines];

数组大小必须是编译时常数。myLines不是编译时常数。相反,使用new分配内存,或者更好地使用std::vector

C++没有可变长度数组。数组的大小必须在编译时确定myLines的值只有在运行时才知道,所以这不起作用。

要使数组的大小仅在运行时已知,请使用std::vector

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

您得到这个错误是因为静态数组需要静态(常量(大小。由于vPoints中组件的数量是动态的,请考虑使用动态数组。或者最好还是坚持vector

最新更新