クラステンプレートを使用すると外部参照エラーになります。 – プログラミング – Home

クラステンプレートを使用すると外部参照...
 
通知
すべてクリア

[解決済] クラステンプレートを使用すると外部参照エラーになります。


平井
 平井
(@平井)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

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 の実行エラー


引用未解決
トピックタグ
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

テンプレートを使うときは関数定義もヘッダファイル(.h)の方に書く必要があります。


返信引用
平井
 平井
(@平井)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

kazumaさんご回答ありがとうございました。
おかげでうまくいきました。

しかしちょっと納得いかないところはあります。
『プログラミング講義C++』という本では宣言部と実装部が
分かれて記述されていますし、またVisualC++でもコンパイ
ルは通っているわけですから・・。

とりあえず目的達成ということで良しとしたいと思います。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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