我尝试实现以下函数:
template<typename T>
class a
{
private:
T var;
friend bool operator==(const a<T> &, const a<T> &);
};
template<typename T> inline bool operator==(const a<T> &r1, const a<T> &r2)
{
return r1.var==r2.var;
}
int main () {
a<int> var0;
a<int> var1;
var0 == var1;
}然而,我得到了
main.obj : error LNK2001: unresolved external symbol "bool __cdecl operator==(class a<int> const &,class a<int> const &)" (??8@YA_NABV?$a@H@@0@Z)在VC++ 2008下
我可以知道如何修复链接错误吗?
发布于 2009-12-31 10:31:29
您已经将友元op==声明为非模板,但是您将其实现为模板。这就是在链接时找不到定义的原因。
我通常如何重载类模板的op==:
template<class T>
struct A {
friend bool operator==(A const& a, A const& b) {
return a.var == b.var;
}
private:
T var;
};发布于 2009-12-31 12:34:33
template<typename T>
class Sample
{
public:
template<typename T> friend bool operator==(const Sample<T>& lhs, const Sample<T>& rhs);
private:
T val_;
};
template<typename T>
bool operator==(const Sample<T>& lhs, const Sample<T>& rhs)
{
return lhs.val_ == rhs.val_;
}
int main()
{
Sample<char*> s1;
Sample<char*> s2;
cout << (s1 == s2) << endl;
}发布于 2009-12-31 13:07:47
以下两种实现有什么不同吗?
1)
template <class T>
class a ;
template <class T>
bool operator==(const a<T> &, const a<T> &);
template<typename T>
class a
{
private:
T var;
friend bool operator== <>(const a<T> &, const a<T> &);
};
template<typename T> inline bool operator==(const a<T> &r1, const a<T> &r2)
{
return r1.var==r2.var;
}2)
template<typename T>
class a
{
private:
T var;
template <class T1>
friend bool operator==(const a<T1> &, const a<T1> &);
};
template<typename T> inline bool operator==(const a<T> &r1, const a<T> &r2)
{
return r1.var==r2.var;
}如果是这样,哪一个是首选的?
https://stackoverflow.com/questions/1983639
复制相似问题