みなさん初めまして。
ただいま、私はVC++6.0でtemplateとSTLの勉強を合わせて行っているのですが、
以下のソースでLNK2001(リンクエラー)が発生してしまい、
原因が分からずに困っています。どなたか、助けてください。
これらのソースファイルはいずれも同じディレクトリ上にあります。
よろしくお願いします。
//a.h
template <typename Type>
class CHogeHoge {
private:
Type m_var;
public:
void set(Type);/*このシンボルが未解決だと言われます。*/
Type get(); /*このシンボルが未解決だと言われます。*/
};
//a.cpp
#include a.h
template <typename Type>
void CHogeHoge<Type>::set(Type Var) {
m_var = Type;
}
template <typename Type>
Type CHogeHoge<Type>::get() {
return m_var;
}
//a1.cpp
#include <iostream.h>
#include a.h
void main( void )
{
CHogeHoge<int> hoge;
hoge.set(1);
cout << hoge.get() << endl;
}
※あと関係ないのですが、私はtemplateのデメリットというのを
聞いたことがないです。もしあるのならそちらのほうも教えていただければ幸いです。
a.cppの内容は全てa.h内に書かれている必要があります。
デメリットは,全てinline展開されるので同じ関数が複数の翻訳単位に存在したりして,
ファイルサイズが簡単に膨れ上がることです。
あと,実装を隠せない,というのもありますね。
回答ありがとうございます。
指摘の通り書き直して、コンパイルエラーを取り除けば
リンクがうまく通りました。
なぜ通常のクラスと同様にできないのか、
その辺の疑問は残りますが、そんなものだと
思うことにします。
templateのデメリットについてのご教授もありがとうございました。