我想使用的恒定值来初始化构件阵列。
--Test.h--
class Test {
public:
static int ARRAY_SIZE;
...
..
private
int m_array[ARRAY_SIZE];
}
--Test.cpp--
int Test::ARRAY_SIZE = 20;
但是,它显示了这样的错误。 “数组边界不是前一个整常数‘]’”
所以,我想知道有一个解决方案。
我想阵列的固定大小。我不希望任何依赖(如恒定值的其他文件)
什么是我们的最佳做法?
该错误是正确的。您的阵列结合的是一个变量,而不是一个常数。
static int ARRAY_SIZE;
以上声明的变量。以下声明常数。
static const int ARRAY_SIZE;
用于阵列的大小,没有超出简单地被宣布const
的附加要求:尺寸必须以恒定的表达,也被称为编译时间常数(由编译器已知的恒定值)进行初始化。如果翻译单元看到ARRAY_SIZE
的声明,但是并没有看到它的价值,那么就不能算作一个编译时间常数。为了解决这个问题,初始化需要在头文件。结合初始化带有声明:
static const int ARRAY_SIZE = 20;
由于C ++ 11,已经表达你有一个编译时间常数,你可能要养成使用它时适用的习惯,一个奇特的方式:
static constexpr int ARRAY_SIZE = 20;