Ошибка правильная.Ваш массив связан с переменной, а не с константой.
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;