У меня есть проблема с инициализацией массива, размер которого определяется как extern const. Я всегда следовал правилу о том, что глобальные переменные должны быть объявлены как extern в файлах заголовков, и их соответствующие определения должны быть в одном из файлов реализации, чтобы избежать ошибок перерисовки переменных. Этот подход работал нормально, пока мне не пришлось инициализировать массив, размер которого определяется как extern const. Я получаю сообщение об ошибке, что ожидается постоянное выражение. Однако, если я попытаюсь присвоить значение переменной const, компилятор правильно сообщит, что значение не может быть присвоено постоянной переменной. Это фактически доказывает, что компилятор видит переменную как константу. Почему тогда возникает ошибка, когда я пытаюсь объявить массив того же размера?
Есть ли способ избежать этого, не используя #define? Я также хотел бы узнать причину этой ошибки.
Package.h:
#ifndef PACKAGE_H
#define PACKAGE_H
extern const int SIZE;
#endif
Package.cpp:
#include "Package.h"
const int SIZE = 10;
foo.cpp:
#include "Package.h"
int main()
{
// SIZE = 5; // error - cannot assign value to a constant variable
// int Array[SIZE]; // error - constant expression expected
return 0;
}