// foo.hpp file
class foo
{
public:
static const int nmConst;
int arr[nmConst]; // line 7
};
// foo.cpp file
const int foo::nmConst= 5;
Ошибка возврата компилятора VC 2015:
1> foo.h (7): ошибка C2131: выражение не было константой
1> 1> foo.h (7): сбой был вызван непостоянными аргументами или
ссылка на непостоянный символ 1> 1> foo.h (7): примечание: см. использование
‘NmConst’
Зачем? nmConst — статическая константа со значением, определенным в файле * .cpp.
Можно использовать static const int
member как размер массива, но вы должны будете определить этот член внутри класса в вашем файле .hpp следующим образом:
class foo
{
public:
static const int nmConst = 10;
int arr[nmConst];
};
Это будет работать
Постскриптум Что касается логики этого, я полагаю, что компилятор хочет знать размер члена массива, как только он встречает объявление класса. Если ты уйдешь static const int
В классе не определен член, компилятор поймет, что вы пытаетесь определить массив переменной длины и сообщит об ошибке (он не будет ждать, если вы действительно определили nmconst
где-то).
Других решений пока нет …