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;