Граница массива должна быть целочисленным константным выражением .Чтобы быть целочисленным константным выражением , выражение должно включать (среди прочего) литералы, enum
значения и const
переменные или static
члены данных только в том случае, если они инициализированыс константными выражениями .
const
переменные целочисленного типа не являются целочисленными константами-выражениями , если они не имеют инициализатора.
Это правило языка, которое позволяет реализации знать определенные постоянные значения во время компиляции, не имея необходимости знать о других единицах перевода (которые не могут быть скомпилированы одновременно и которые могут быть изменены независимо).
* Переменные 1021 * в области имен имеют внутреннюю связь по умолчанию (т. Е. Без явного extern
), поэтому у вас не будет проблем с множественным определением, если вы сделаете что-то подобное.
// header.h
const int a = 10;
.
// source.cpp
int anarray[a];