テンプレートクラスの明示的インスタンス化について質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Eeel

テンプレートクラスの明示的インスタンス化について質問です。

#1

投稿記事 by Eeel » 15年前

こんばんは。
テンプレートクラスでも宣言はヘッダファイルに、定義はソースファイルに書きたかったので
明示的インスタンス化で解決しようとしたのですが、
『明示的なテンプレートのインスタンス生成要求に対して適切な定義がありません。』
という警告が出てしまいます。
自分で調べたり検索したりしたのですが、どうすれば解決できるのかわかりませんでした。
template.hが下記の内容で、template.cppは省略しますがCBase_tクラスのメンバ関数の定義を行っています。
template<class T> class CBase_t
{
private:
&#160;&#160;&#160;&#160;T* m_pValue;
public:
&#160;&#160;&#160;&#160;CBase_t();
&#160;&#160;&#160;&#160;T set(T value);
&#160;&#160;&#160;&#160;T calc(T value);
&#160;&#160;&#160;&#160;T get(void);
&#160;&#160;&#160;&#160;~CBase_t();
};

template class CBase_t<int>;&#160;&#160;&#160;&#160;//ここの2行で警告が出ています
template class CBase_t<short>;

警告を無視しても一応想定通りの結果にはなりました。
しかし他にどのような影響があるのかわからない(私が理解できていない)事と、
警告を出しつつ無視していると、他の重大な警告を見落としかねないので
警告の出ない完璧な記述にしたいのです。

どのようにすればよいのでしょうか?
お願いいたします。

Justy

Re:テンプレートクラスの明示的インスタンス化について質問です。

#2

投稿記事 by Justy » 15年前


>明示的なテンプレートのインスタンス生成要求に対して適切な定義がありません

 明示的に生成するにはメンバの定義が必要です。
 なので、メンバ関数の中の実装を書けば警告は消えると思います。

たかぎ

Re:テンプレートクラスの明示的インスタンス化について質問です。

#3

投稿記事 by たかぎ » 15年前

処理系不明なので何ともいえません。

Eeel

Re:テンプレートクラスの明示的インスタンス化について質問です。

#4

投稿記事 by Eeel » 15年前

回答ありがとうございます。

>Justyさん
>メンバ関数の中の実装を書けば警告は消えると思います。
メンバ関数の中に実装を書くならば、明示的なインスタンス化は必要ありませんよね?
警告すら出さないようにする事はできないという事でしょうか。

>たかぎさん
すみませんでした。
WindowsXPでVC++EEを使用しています。

Justy

Re:テンプレートクラスの明示的インスタンス化について質問です。

#5

投稿記事 by Justy » 15年前

[color=#d0d0ff" face="monospace]
template class CBase_t<int>;
template class CBase_t<short>;
[/color]

 この2行は template.cpp側に書いてみてください。
 そうすれば実装を元に明示的にインスタンス化ができます。

Eeel

Re:テンプレートクラスの明示的インスタンス化について質問です。

#6

投稿記事 by Eeel » 15年前

大量に出ていた警告が綺麗さっぱり消えました。
爽快です。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る