自作テンプレートクラスのLNK2019

解決


moe  2006-10-18 02:39:36  No: 63351

自作テンプレートクラスを作成してビルドしたら
リンカエラーerror LNK2019って出てきちゃいました。
テンプレートクラスのヘッダーファイル内で宣言と定義を書き、
使用するクラスのソースファイルでそのヘッダーをインクルード
してるのですが、何か問題があるのでしょうか?
よろしくお願いいたします。


επιστημη  2006-10-18 04:35:17  No: 63352

未解決のシンボルがあります。

呼んでいるのに定義されていない関数/変数があるのでしょう。


yoh2  2006-10-18 10:02:31  No: 63353

エラー情報からは、何が定義されていなかったかも分かるので、その定義を確認しましょう。

テンプレートクラスの静的メンバ変数の定義は結構忘れがちですが大丈夫でしょうか?

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 が定義されていてもこれが必要。


moe  2006-10-18 21:05:21  No: 63354

yoh2さんのおっしゃってること、その通りでした。
ありがとうございます。
ところで、テンプレートクラスのスタティック関数については
ソースファイルに定義しても大丈夫なのですよね?
なぜ、テンプレートクラスだとヘッダー部分に定義しなければ
いけないかがよくわかってないのですが。。


keichan  2006-10-18 22:51:57  No: 63355

つ「http://www.tietew.jp/cppll/archive/2596


moe  2006-10-20 00:03:09  No: 63356

keichanさん、どうもありがとう。
すごく納得しました。
が、複雑なんですね。。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加