std :: array instantiation错误

时间:2012-12-20 16:39:55

标签: c++ arrays c++11 containers

这里有一个简单的问题。我正在尝试使用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>'
};

3 个答案:

答案 0 :(得分:44)

我的第一个猜测就是你忘了:

#include <array>

...在尝试使用array模板之前。虽然你可以(至少间接地)使用一些类而不包括标题(例如,在大多数情况下,编译器可以从std::initializer_list创建{1, 2, 3}而不包括任何标题)(包括{{ 1}})您需要在使用类模板之前包含标题。

答案 1 :(得分:2)

您正在使用C风格的枚举,因此如果您的编译器不完全符合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;
}

答案 2 :(得分:1)

尝试使用

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