声明一个常量大小的数组——编译错误

Declaring an array with constant size - compilation error

本文关键字:数组 编译 错误 常量 一个 声明      更新时间:2023-10-16

有人能帮我解释一下吗?

我在头文件中声明了一个常量:

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成员,在类中定义,它将工作

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