テンプレートクラスで分割コンパイル – プログラミング – Home

テンプレートクラスで分割コンパイル
 
通知
すべてクリア

[解決済] テンプレートクラスで分割コンパイル


goto
 goto
(@goto)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

みなさん初めまして。
ただいま、私は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のデメリットというのを
聞いたことがないです。もしあるのならそちらのほうも教えていただければ幸いです。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 252
 

a.cppの内容は全てa.h内に書かれている必要があります。

デメリットは,全てinline展開されるので同じ関数が複数の翻訳単位に存在したりして,
ファイルサイズが簡単に膨れ上がることです。
あと,実装を隠せない,というのもありますね。


返信引用
goto
 goto
(@goto)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

回答ありがとうございます。
指摘の通り書き直して、コンパイルエラーを取り除けば
リンクがうまく通りました。

なぜ通常のクラスと同様にできないのか、
その辺の疑問は残りますが、そんなものだと
思うことにします。

templateのデメリットについてのご教授もありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました