にっちもさっちもいかないので、試しに以下の様にテストコードを書いてみました。
ただ引数を受け取ってメッセージボックスを出すだけのコードです。
/////////////////////////////////////////////////////////////////////////////////////////////////////
//クラス名 :DataHunger
/////////////////////////////////////////////////////////////////////////////////////////////////////
class DataHunger:public CommonData{
//testコード
BOOL Test(int);
template<typename X>BOOL Test2(X);
};
//普通のメンバ関数の定義
BOOL DataHunger::Test(int x){
MessageBox(NULL,"test","test",MB_OK);
return true;
}
//テンプレート関数
template<typename X>BOOL DataHunger::Test2(X x){
MessageBox(NULL,"test","test",MB_OK);
return true;
}
//インスタンスの生成、メソッドの呼び出し
BOOL Debug::GetDebugData(){
DataHunger dh;
dh.Test(1);
dh.Test2(1);
省略
return true;
}
これを実行すると。
以下の様にリンクエラーが出てしまいます。
1>Debug.obj : error LNK2019: 未解決の外部シンボル "public: int __thiscall DataHunger::Test2<int>(int)" (??$Test2@H@DataHunger@@QAEHH@Z) が関数 "public: int __thiscall Debug::GetDebugData(void)" (?GetDebugData@Debug@@QAEHXZ) で参照されました。
普通のメンバ関数である、Test関数はコンパイルが通って、テンプレート関数で怒られているようです。
テンプレート関数を呼び出す動作をコメントアウトすると普通に動作して、メッセージボックスが表示されます。
ただ、書き方が違うだけで、やってることは一緒だと思うのですが、なぜコンパイルできないのでしょう・・・。
ご指導お願いいたします。