Странная ошибка C2131: выражение не было константой в VC 2015

// 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.

1

Решение

Можно использовать static const int member как размер массива, но вы должны будете определить этот член внутри класса в вашем файле .hpp следующим образом:

class foo
{
public:

static const int nmConst = 10;
int arr[nmConst];

};

Это будет работать

Постскриптум Что касается логики этого, я полагаю, что компилятор хочет знать размер члена массива, как только он встречает объявление класса. Если ты уйдешь static const int В классе не определен член, компилятор поймет, что вы пытаетесь определить массив переменной длины и сообщит об ошибке (он не будет ждать, если вы действительно определили nmconst где-то).

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]