エラー「Implicit instantiation of undefined template」の原因


C++で特定のクラスを利用すると、稀に以下のようなエラーが発生する。

// Implicit instantiation of undefined template 'std::__1::array<int, 3>'
std::array<int, 3> ary;

原因

ヘッダーファイルがインポートされていないことが原因。クラスに対応するヘッダーをきちんとインポートすれば良い。

#include <array>
std::array<int, 3> ary; // OK

根本原因

クラスの定義が見つからないことが原因。

ちなみに

No member named 'array' in namespace 'std'

というエラーにならないのは、arrayクラスが前方宣言されているため(標準ライブラリ側で暗黙的に前方宣言されている場合がある)

実際にMyArrayというクラスを前方宣言のみ行い、実体は未定義の状態でコンパイルしてみると、今回と同様のエラーが発生する。

// 前方宣言
template <class _Tp, size_t _Size> struct MyArray;
// 定義省略
// template <class _Tp, size_t _Size> struct MyArray {};

/// Implicit instantiation of undefined template 'MyArray<int, 3>'
MyArray<int, 3> ary;

広告