ошибки компилятора — C ++: & quot; (статическая константная двойная переменная) не может появляться в константе-выражении & quot;

В classA У меня есть:

static const double alias_var = classB::const_var;

Затем в classB:

static const double const_var = 1000.;

Но компилятор продолжает говорить мне:

‘classB :: const_var’ не может появляться в константном выражении.

Почему бы и нет? Самое смешное, если я изменюсь classB::const_var из double для intошибки уходят.

Я добавил эти переменные для оптимизации. Я надеюсь, что использование плавающих точек не помешает оптимизации.

Я использую GCC 5.4.0 в 64-битной среде Ubuntu. Я уверен, что тот факт, что я использую Qt4, не имеет к этому никакого отношения.

Изменить: мой лучший обходной путь должен иметь в classB:

static const int const_var_int = 1000;
static const double const var = const_var_int;

а затем в classA (любой другой) const_var_int на мои с плавающей точкой. Это избавляет от ошибок. Я не знаю, побеждает ли это цель или каковы другие последствия.

2

Решение

Краткий ответ: используйте constexpr вместо const,

Длинный ответ: в старом C ++ 03 есть специальные положения, которые позволяют членам класса, которые являются статическими интегральными константами, использоваться в константных выражениях. Это положение не распространяется на нецелые (двойные).

С С ++ 11, constexpr снял это ограничение.

4

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

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

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