2D阵列中的预期常数
Expected constant in 2d array
double rainPerMonth(const int YEARS)
{
int monthYear[MONTHS][YEARS];
// ...
}
Visual Studio在数组声明下方显示了一条弯曲的线,称YEARS
在创建数组时必须是一个常数。这是一个IDE问题,因为该变量尚未初始化,还是我错误地编写了?
MONTHS
已经在全球声明。
数组大小必须是一个恒定的表达式 - 即,在编译时已知的值。(有些编译器将C风格的可变长度数组作为非标准扩展名,但我认为Visual C 也不会这样做。即使确实如此,也最好不要依靠此类扩展。
在编译时不知道函数参数,因此不能用作数组大小。您最好的选择是在这里
std::vector<std::array<int, MONTHS>> monthYear(YEARS);
在C 中,数组必须在编译时大小。您试图做的是声明一个在运行时大小的。在您声明的功能中,YEARS
仅在函数范围内恒定。您可以称其为 rainPerMonth(someInt);
,其中 someInt
是某些用户输入的结果(这表明结果不是编译时常数)。
可变长度阵列是C的扩展,但不是C 。要完成您想做的事情,您可以使用动态内存或std::vector
。
我认为您的问题在于C 希望在编译时常数中保持常数以创建您的变量monthYear
。如果您将其作为函数传递,则不必在编译时知道它吗?例如:
const int x=2;
const int y=3;
char xyChoice;
std::cin >> xyChoice;
if (xyChoice == 'x')
rainPerMonth(x);
else
rainPerMonth(y);
我不确定,但是在我看来,这会给您一个常数的INT传递给您的功能,但是编译器不知道在运行时创建一个数组?
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 从阵列C++中删除重复项
- 阵列的大小在C++中是否灵活?
- 反转阵列中的正序列
- 阵列 C 中的常数表达
- 阵列在结构内使用C 中的预定义常数
- 2D阵列中的预期常数