首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实现基于模板的运算符赋值函数时的链接错误

实现基于模板的运算符赋值函数时的链接错误
EN

Stack Overflow用户
提问于 2009-12-31 10:25:33
回答 3查看 204关注 0票数 1

我尝试实现以下函数:

代码语言:javascript
运行
复制
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;
}

然而,我得到了

代码语言:javascript
运行
复制
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下

我可以知道如何修复链接错误吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-31 10:31:29

您已经将友元op==声明为非模板,但是您将其实现为模板。这就是在链接时找不到定义的原因。

我通常如何重载类模板的op==:

代码语言:javascript
运行
复制
template<class T>
struct A {
  friend bool operator==(A const& a, A const& b) {
    return a.var == b.var;
  }
private:
  T var;
};
票数 3
EN

Stack Overflow用户

发布于 2009-12-31 12:34:33

代码语言:javascript
运行
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2009-12-31 13:07:47

以下两种实现有什么不同吗?

1)

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
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;
}

如果是这样,哪一个是首选的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1983639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档