【C++】テンプレートクラスの前方宣言でエラーが発生する場合の対処

Template parameter redefines default argument

上記のエラーはデフォルト引数を伴うテンプレートクラスの前方宣言で陥りがちな問題。

// 前方宣言
template <typename T = int> struct Number;

// 実装
template <typename T = int> struct Number { T value; };
/// error: Template parameter redefines default argument

前方宣言時のデフォルト引数を未指定にすることで対処可能。

// Good!!
template <typename T> struct Number;
template <typename T = int> struct Number { T value; };

または実装側のデフォルト引数を未指定にしてもよい。

// Good!!
template <typename T = int> struct Number;
template <typename T> struct Number { T value; };

広告