以下代码重现了我在 VS2005 中遇到的错误:我有一个模板函数,例如
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 . 当我现在在两个编译单元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的问题还是我必须将结构的定义移出本地函数范围并使其成为模板?