Это хороший код, который должен был принять компилятор:
class Class {
const static int arraySize = 384;
int ar[arraySize+2];
};
, а если нет, ваш компилятор сломан.
Однако, если вы перемещаете фактическую константу из заголовочного файла в выбранную единицу перевода, это делает код недействительным.
// Class.h
class Class {
const static int arraySize;
int ar[arraySize+2]; // ERROR
};
// Class.cpp
const int Class::arraySize = 384;
Это потому, что размер вашего объекта Class
не можетопределяется во время компиляции из данных, доступных только в заголовке.Это не точная правильная причина, но рассуждения в этом направлении помогают понять ошибки компиляции, подобные этой.
Чтобы избежать таких ошибок, вы можете заменить static const int
на enum
Например,
class Class {
enum { arraySize = 384 };
int ar[arraySize+2];
};