表达式在c++中必须有一个常数值错误
expression must have a constant value error in 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
。
- 有一个打印语句的函数是一种糟糕的编程实践吗
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 有没有可能有一个只有ADL才能找到的非好友功能
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 在学习数据结构之前对STL有一个了解是好的吗?
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- C++std用一个常数值列出初始化,它是否会改变性能
- c++表达式必须有一个常数值
- 如何创建一个std::map的常数值,它仍然可以被[]操作符访问
- 错误28:表达式必须有一个常量值
- 有一个用于常微分方程(ODE)求解的c++库
- Constexpr函数必须有一个参数值
- 表达式在c++中必须有一个常数值错误
- 错误:表达式必须具有常数值.对于一个明显的常数值
- 在c++中表达式必须有一个常数值