次のコードは、VS2005 で発生したエラーを再現しています: I have a template function like
template <typename T> bool foo(T x, T y) {
struct bar {
public:
T t;
bool CompLT(const bar& that) {
return (this->t) < (that.t);
}
};
bar X, Y;
X.t = x;
Y.t = y;
return X.CompLT(Y);
}
ヘッダーファイルにAh . 2 つのコンパイル ユニットB.cppとC.cppでヘッダーを使用すると、VS2005 でエラーが発生します。
error LNK2005: "public: bool __thiscall `bool __cdecl foo<float>(float,float)'::`2'::bar::CompLT(struct `bool __cdecl foo<float>(float,float)'::`2'::bar const &)" (?CompLT@bar@?1???$foo@M@@YA_NMM@Z@QAE_NABU1?1???$foo@M@@YA_NMM@Z@@Z) is already defined in B.obj .
このエラーを修正するにはどうすればよいですか? これは VS2005 の問題ですか、それとも構造体の定義をローカル関数スコープから移動してテンプレートにする必要がありますか?