18

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

3 回答 3

54

我的第一个猜测是您只是忘记了:

#include <array>

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

于 2012-12-20T17:16:29.403 回答
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;
}
于 2012-12-20T16:43:23.697 回答
1

试试看

 std::array<char, (int)NUMEL> charContainer;
于 2012-12-20T16:46:42.453 回答