Std:: ошибка экземпляра массива

Смущающе простая проблема здесь. Я пытаюсь использовать std::array и отключаюсь при первом препятствии с ошибкой...

implicit instantiation of undefined template 'std::__1::array<char,10>'

Ниже приведен код, который дает ошибку. Я могу обойти это с помощью std::map, но я уверен, что исправление должно быть простым!

enum  p_t   {
    EMPTY = 0
    ,BORDER_L
    // ...
    ,BORDER_BR
    ,DATUM
    ,NUMEL    };

class PlotChars
{
    array<char, p_t::NUMEL> charContainer;
    // error on this ^ line:
    //   implicit instantiation of undefined template 'std::__1::array<char,10>'
};

Ответ 1

Мое первое предположение заключалось в том, что вы просто забыли:

#include <array>

... прежде чем пытаться использовать шаблон array. Хотя вы можете (хотя бы косвенно) использовать несколько классов без включения заголовков (например, в большинстве случаев компилятор может создать std::initializer_list из чего-то типа {1, 2, 3} без включения заголовков) (в том числе std::array) для включения заголовка перед использованием шаблона класса.

Ответ 2

Вы используете перемычку в стиле C, поэтому вам, вероятно, нужно опустить имя перечисления, если ваш компилятор не полностью совместим с С++ 11.

array<char, NUMEL> charContainer;

Это работает на gcc 4.4.3, тогда как эквивалент вашего кода еще не работает над этой версией (но делает это позже)

#include <array>

enum XX { X,Y,Z };

struct Foo
{
  std::array<char, Y> a;
};

int main()
{
  Foo f;
}

Ответ 3

Попробуйте с этим

 std::array<char, (int)NUMEL> charContainer;