я делаю что-то вроде этогоИспользование статического сопзЬ + сопзЬ, как массив, связанный
Class.hpp:
class Class {
private:
static const unsigned int arraySize;
int ar[arraySize+2];
};
Class.cpp:
#include <Class.hpp>
const unsigned int arraySize = 384;
Компилятор (д ++, А C++ для ОС QNX на основе g ++) дает мне error: array bound is not an integer constant
при компиляции единицы, включая Class.hpp
(а не при компиляции Class.cpp).
Почему это не работает? Я знаю, что статический константный член может использоваться как привязка к массиву, гарантированный стандартом C++ (см. this anwser). Но почему компилятор не видит результат static const + const
как константу?
Компиляция отлично подходит для меня (gcc 4.6.1), как и должно быть. Вероятно, ошибка в том компиляторе? –
Я обновил свой пример, чтобы лучше совместить мой реальный код. Может быть, есть проблема с форвардным объявлением arraySize? – MBober
См. Здесь: [DR # 721] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#721). Это всегда было предназначено (и в C++ 11 явно указано), что инициализатор для константы должен быть видимым в точке, где элемент статических данных или константная переменная использовались для того, чтобы он квалифицировался как постоянное выражение. –