2d数组中的预期常量

时间:2014-01-31 17:47:49

标签: c++ arrays

double rainPerMonth(const int YEARS)
{
   int monthYear[MONTHS][YEARS];
   // ...
}

Visual Studio在数组声明下面显示了一条波浪线,表示在我创建数组时YEARS必须是常量。这是一个IDE问题,因为该变量尚未初始化,或者我写错了吗?

MONTHS已在全球范围内宣布。

3 个答案:

答案 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,但是编译器在运行之前不知道创建数组的大小是什么?