Как инициализировать член массива постоянным значением члена? - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу использовать постоянное значение для инициализации массива элементов.

- Test.h -

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

- Test.cpp -

int Test::ARRAY_SIZE = 20;

Но, это показывает ошибку, как это.'границы массива не являются целочисленной константой перед'] ''

Итак, я хочу знать, что есть решение для этого.

Я хочу фиксированный размер массива.и я не хочу никакой зависимости (например, дополнительные файлы для постоянного значения)

Каков наилучший метод для этого?

1 Ответ

0 голосов
/ 08 февраля 2019

Ошибка правильная.Ваш массив связан с переменной, а не с константой.

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;
...