こんばんは。
テンプレートクラスでも宣言はヘッダファイルに、定義はソースファイルに書きたかったので
明示的インスタンス化で解決しようとしたのですが、
『明示的なテンプレートのインスタンス生成要求に対して適切な定義がありません。』
という警告が出てしまいます。
自分で調べたり検索したりしたのですが、どうすれば解決できるのかわかりませんでした。
template.hが下記の内容で、template.cppは省略しますがCBase_tクラスのメンバ関数の定義を行っています。
template<class T> class CBase_t
{
private:
    T* m_pValue;
public:
    CBase_t();
    T set(T value);
    T calc(T value);
    T get(void);
    ~CBase_t();
};
template class CBase_t<int>;    //ここの2行で警告が出ています
template class CBase_t<short>;
警告を無視しても一応想定通りの結果にはなりました。
しかし他にどのような影響があるのかわからない(私が理解できていない)事と、
警告を出しつつ無視していると、他の重大な警告を見落としかねないので
警告の出ない完璧な記述にしたいのです。
どのようにすればよいのでしょうか?
お願いいたします。
テンプレートクラスの明示的インスタンス化について質問です。
Re:テンプレートクラスの明示的インスタンス化について質問です。
>明示的なテンプレートのインスタンス生成要求に対して適切な定義がありません
明示的に生成するにはメンバの定義が必要です。
なので、メンバ関数の中の実装を書けば警告は消えると思います。
Re:テンプレートクラスの明示的インスタンス化について質問です。
回答ありがとうございます。
>Justyさん
>メンバ関数の中の実装を書けば警告は消えると思います。
メンバ関数の中に実装を書くならば、明示的なインスタンス化は必要ありませんよね?
警告すら出さないようにする事はできないという事でしょうか。
>たかぎさん
すみませんでした。
WindowsXPでVC++EEを使用しています。
>Justyさん
>メンバ関数の中の実装を書けば警告は消えると思います。
メンバ関数の中に実装を書くならば、明示的なインスタンス化は必要ありませんよね?
警告すら出さないようにする事はできないという事でしょうか。
>たかぎさん
すみませんでした。
WindowsXPでVC++EEを使用しています。
Re:テンプレートクラスの明示的インスタンス化について質問です。
[color=#d0d0ff" face="monospace]
template class CBase_t<int>;
template class CBase_t<short>;
[/color]
この2行は template.cpp側に書いてみてください。
そうすれば実装を元に明示的にインスタンス化ができます。
template class CBase_t<int>;
template class CBase_t<short>;
[/color]
この2行は template.cpp側に書いてみてください。
そうすれば実装を元に明示的にインスタンス化ができます。