如何使用常量成员值初始化数组成员?

时间:2019-02-08 06:07:33

标签: c++ arrays class initialization constants

我想使用常量值初始化成员数组。

-Test.h-

class Test {
public:
  static int ARRAY_SIZE;
...
..
private
  int m_array[ARRAY_SIZE];
}

-Test.cpp-

int Test::ARRAY_SIZE = 20;

但是,它显示了这样的错误。 “数组绑定不是']'前的整数常量

所以,我想知道有解决方案。

我想要固定大小的数组。我不想要任何依赖 (例如其他文件,以获得恒定值)

最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

错误是正确的。您的数组绑定是变量,而不是常量。

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;

答案 1 :(得分:-1)

在Cpp中,数组的大小在编译时必须恒定。但是,在您的情况下,ARRAY_SIZE不是常数。它是可变的。这就是为什么您会收到该错误。因此,您可以将变量声明为const或宏。

喜欢:

static const int ARRAY_SIZE;

#define ARRAY_SIZE <Your_Size>