まず、お時間をいただきありがとうございます。テンプレートに少し問題があります (このテンプレートに関してはまったくの初心者です)。
コードは、Visual Studio 2012 でコンパイルされた (または少なくとも試みられた) C++ です。
main.h:
class Main
{
public:
template<class T>
static void foo(T param1);
};
main.cpp
#include "main.h"
template<class T>
static void Main::foo(T param1)
{
// do things
}
その他.h
#include "main.h"
class Other
{
public:
void foo2();
};
その他.cpp
#include "other.h"
void Other::foo2()
{
int var1 = 10;
Main::foo(var1); // Here is the link error.
}
問題はおそらく非常に一般的な未解決の外部シンボルを知っているので、このリンクエラーを理解して解決するのに役立つものを見つけるためにウェブを見回しました。すでに試しましたが、結果はありません。
私はもう試した:
1- .h ファイルに foo 関数を実装する
2-インラインキーワードを使用する
3-エクスポートを試しました(実際にはコンパイラーによってサポートされていません)
しかし、これらのアプローチはどれも私にはうまくいかないようです。そのため、明らかに私は何か間違っているか、何かが欠けています。
テンプレート化された関数は「Main」クラスで宣言する必要があることに注意してください。関数を「その他」クラスに移動しても、エラーは解決できますが、役に立ちません。
エラー:
エラー 5 エラー LNK2019: 未解決の外部シンボル "public: static void __fastcall CGame::Push(char *,int,unsigned int &)" (??$Push@H@CGame@@SIXPADHAAI@Z) 関数 "public: void __thiscall ClientManager::RequestLogin(int,char *)" (?RequestLogin@ClientManager@@QAEXHPAD@Z)
CGameはMain、Push = foo()、ClientManager = Other、RequestLogin = foo2になります。
お時間をいただきありがとうございました。