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