声明具有常量大小的数组 - 编译错误

时间:2014-06-27 10:46:29

标签: c++ arrays stack const

有人可以帮我解释一下:

我在headerfile中声明了一个常量:

const int INCRSIZE;

然后在MIL中,常量被初始化:

: INCRSIZE(10)

然后在代码中的函数中(它是一个gtkmm-GUI中使用的回调函数

 bool MyWindow::on_drawing_expose_event(GdkEventExpose* event)

我使用此常量

在堆栈上分配一个数组
double arrPxStep[INCRSIZE];

当我编译时,我得到以下错误:

-expected constant expression
- cannot allocate an array if constant size 0
- arrPxStep unknown size

我知道常量被初始化 - 为什么数组不能使用在MIL中初始化的这个常量的memeber变量?

2 个答案:

答案 0 :(得分:2)

根据您发布的代码的外观,INCRSIZE是类的非静态成员。您不能使用它来初始化数组,即使该值在构造函数中始终设置为相同。这只是规则。

使INCRSIZE成为在类中定义的静态const成员,它将起作用。

答案 1 :(得分:1)

编译器很难检测到您的变量INCRSIZEconst并已初始化。因此它像通常的整数变量一样处理INCRSIZE。由于你在类的构造函数中为这个变量设置了值,编译器应该知道函数调用的顺序(对你来说很明显,构造函数将是第一个被调用的函数,但是对于编译器来说,它不是那么容易分析它)。因此,它不包含在C ++标准中(原因之一:因为它不必要且难以支持)。