VC++の質問です。
クラステンプレートを始めて使ってみたのですが、メンバ関数を使うところで
外部参照エラーとなってしまいます。教科書どおりにやっているつもりなので
すが、どこに問題があるのでしょうか?
////////////////////////////////////////////////////////////////
MyList.h
////////////////////////////////////////////////////////////////
template <class Type> class CMyList {
public:
Type num;
public:
CMyList(void){}; // コンストラクタ
~CMyList(void){}; // デストラクタ
Type get(void); // num を返す
};
////////////////////////////////////////////////////////////////
MyList.cpp
////////////////////////////////////////////////////////////////
#include MyList.h
template <class Type>
Type CMyList<Type>::get(void)
{
return num;
}
////////////////////////////////////////////////////////////////
MyList.cpp
////////////////////////////////////////////////////////////////
#include MyList.h
CMyList<int> w;
w.get(); // 外部参照エラー
///////////////////////////////////////////////////////////////
リンク中...
***Doc.obj : error LNK2001: 外部シンボル "public: int __thiscall CMyList<int>::get(void) (?get@?$CMyList@H@@QAEHXZ) は未解決です
Debug/***.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
テンプレートを使うときは関数定義もヘッダファイル(.h)の方に書く必要があります。
kazumaさんご回答ありがとうございました。
おかげでうまくいきました。
しかしちょっと納得いかないところはあります。
『プログラミング講義C++』という本では宣言部と実装部が
分かれて記述されていますし、またVisualC++でもコンパイ
ルは通っているわけですから・・。
とりあえず目的達成ということで良しとしたいと思います。
ありがとうございました。