自作テンプレートクラスを作成してビルドしたら
リンカエラーerror LNK2019って出てきちゃいました。
テンプレートクラスのヘッダーファイル内で宣言と定義を書き、
使用するクラスのソースファイルでそのヘッダーをインクルード
してるのですが、何か問題があるのでしょうか?
よろしくお願いいたします。
未解決のシンボルがあります。
呼んでいるのに定義されていない関数/変数があるのでしょう。
エラー情報からは、何が定義されていなかったかも分かるので、その定義を確認しましょう。
テンプレートクラスの静的メンバ変数の定義は結構忘れがちですが大丈夫でしょうか?
template<typename T> struct A{
static int n;
};
template<typename T> struct A<T>::n; // これを忘れると……
...
A<int>::n = 10; // これでリンクエラー。
特殊化をしているとさらに忘れがち。
template<> struct A<double>{
static int n;
};
int A<double>::n; // 上記の int A<T>::n が定義されていてもこれが必要。
yoh2さんのおっしゃってること、その通りでした。
ありがとうございます。
ところで、テンプレートクラスのスタティック関数については
ソースファイルに定義しても大丈夫なのですよね?
なぜ、テンプレートクラスだとヘッダー部分に定義しなければ
いけないかがよくわかってないのですが。。
つ「http://www.tietew.jp/cppll/archive/2596」
keichanさん、どうもありがとう。
すごく納得しました。
が、複雑なんですね。。
ツイート | ![]() |