double rainPerMonth(const int YEARS)
{
int monthYear[MONTHS][YEARS];
// ...
}
Visual Studio在数组声明下面显示了一条波浪线,表示在我创建数组时YEARS
必须是常量。这是一个IDE问题,因为该变量尚未初始化,或者我写错了吗?
MONTHS
已在全球范围内宣布。
答案 0 :(得分:5)
数组大小必须是常量表达式 - 即编译时已知的值。 (有些编译器提供C风格的可变长度数组作为非标准扩展,但我不认为Visual C ++会这样做。即使它确实如此,最好不要依赖这样的扩展。)
函数参数在编译时是未知的,因此不能用作数组大小。你最好的选择可能是
std::vector<std::array<int, MONTHS>> monthYear(YEARS);
答案 1 :(得分:2)
在C ++中,必须在编译时调整数组大小。您尝试做的是声明在运行时调整大小的一个。在您声明的函数中,YEARS
仅在函数范围内是常量。您可以将其称为rainPerMonth(someInt);
,其中someInt
是某些用户输入的结果(显示结果不是编译时常量)。
可变长度数组是C的扩展,但不是C ++的扩展。要做你想做的事,你可以使用动态记忆,或std::vector
。
答案 2 :(得分:0)
我认为你的问题在于C ++在编译时常量意义上需要一个常量来创建变量monthYear
。如果将它作为函数传递,则在编译时无需知道它?例如:
const int x=2;
const int y=3;
char xyChoice;
std::cin >> xyChoice;
if (xyChoice == 'x')
rainPerMonth(x);
else
rainPerMonth(y);
我不确定,但在我看来,这样会给你一个传递给你的函数的常量int,但是编译器在运行之前不知道创建数组的大小是什么?