声明一个常量大小的数组——编译错误
Declaring an array with constant size - compilation error
有人能帮我解释一下吗?
我在头文件中声明了一个常量:
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中初始化的常量成员变量?
从您发布的代码来看,INCRSIZE是类的非静态成员。你不能用它来初始化数组,即使在构造函数中该值总是被设置为相同的值。这就是规则。
将INCRSIZE设置为静态const成员,在类中定义,它将工作
编译器很难检测到您的变量INCRSIZE
是const
并已初始化。因此它将INCRSIZE
作为一般的整型变量来处理。因为你在类的构造函数中设置了这个变量的值,编译器应该知道函数调用的顺序(对你来说很明显,构造函数将是第一个被调用的函数,但对编译器来说分析它并不容易)。因此,它没有包含在c++标准中(原因之一:因为它是不必要的,难以支持)。