2D阵列中的预期常数

Expected constant in 2d array

本文关键字:常数 阵列 2D      更新时间:2023-10-16
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传递给您的功能,但是编译器不知道在运行时创建一个数组?