有人可以帮我解释一下:
我在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变量?
答案 0 :(得分:2)
根据您发布的代码的外观,INCRSIZE是类的非静态成员。您不能使用它来初始化数组,即使该值在构造函数中始终设置为相同。这只是规则。
使INCRSIZE成为在类中定义的静态const成员,它将起作用。
答案 1 :(得分:1)
编译器很难检测到您的变量INCRSIZE
是const
并已初始化。因此它像通常的整数变量一样处理INCRSIZE
。由于你在类的构造函数中为这个变量设置了值,编译器应该知道函数调用的顺序(对你来说很明显,构造函数将是第一个被调用的函数,但是对于编译器来说,它不是那么容易分析它)。因此,它不包含在C ++标准中(原因之一:因为它不必要且难以支持)。