2015-05-13 2 views
1

Я определяю тип с именем inputTy с использованием std::array (C++ 11), размерность массива, объявленного как внешнее постоянное целое число d.Ошибка компиляции при typedef an std :: array

namespace project { 
    namespace types{ 
    extern const int d; 
    typedef std::array<double, d> inputTy; 
    } 
} 

Почему у меня такая ошибка при компиляции?

../../include/types.h:16:29: error: the value of ‘d’ is not usable in a constant expression 
typedef std::array<double, d> inputTy; 
          ^
../../include/types.h:15:18: note: ‘d’ was not initialized with a constant expression 
extern const int d; 
      ^

Благодарим за помощь.

+0

Я думаю, что значение 'd' должно быть константой времени компиляции. Когда это внешний вид, как должен компилятор знать? – helb

+0

Возможный дубликат [Каковы требования для параметров шаблона C++?] (Http://stackoverflow.com/questions/643763/what-are-the-requirements-for-c-template-parameters) – martin

ответ

3

Вы не можете использовать extern const int как размер массива, потому что компилятор не знает размер константы из другого блока компиляции.

Измените свою конструкцию, чтобы использовать std::vector или какой-либо другой контейнер, чтобы преодолеть проблему или поместить константу в заголовок и включить ее перед typede fing.