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 に答える