【问题标题】:How to initialize the array member with constant member value?如何用常量成员值初始化数组成员?
【发布时间】:2019-07-02 08:49:13
【问题描述】:

我想用一个常数值来初始化成员数组。

--Test.h--

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

--Test.cpp--

int Test::ARRAY_SIZE = 20;

但是,它显示这样的错误。 '数组边界在']'之前不是整数常量'

所以,我想知道有解决办法。

我想要固定大小的数组。我不想要任何依赖 (比如常量值的附加文件)

这方面的最佳做法是什么?

【问题讨论】:

  • 你试过了吗:static const int ARRAY_SIZE;const int Test::ARRAY_SIZE = 20;
  • 它可以工作,但是当我使用 int m_array[ARRAY_SIZE] 时它显示相同的错误。

标签: c++ arrays class initialization constants


【解决方案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;

【讨论】:

  • 谢谢,我在 test.h 文件中应用了这样的 'static const int ARRAY_SIZE = 20'。但我还有一个问题。当我尝试在 test.cpp 中初始化时,它显示相同的错误。 test.h 静态常量 int ARRAY_SIZE; test.cpp const int ARRAY_SIZE = 20;
  • @Siimson 我的错,这是我回答的一个缺点。我已经添加了缺失的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多