В 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
на мои с плавающей точкой. Это избавляет от ошибок. Я не знаю, побеждает ли это цель или каковы другие последствия.
Краткий ответ: используйте constexpr
вместо const
,
Длинный ответ: в старом C ++ 03 есть специальные положения, которые позволяют членам класса, которые являются статическими интегральными константами, использоваться в константных выражениях. Это положение не распространяется на нецелые (двойные).
С С ++ 11, constexpr
снял это ограничение.
Других решений пока нет …