非会员运营商==我可以让它静态吗?

时间:2013-09-11 03:37:11

标签: c++

我首先在头文件中写了一个非成员运算符==函数:

bool operator==(
  const Node& lhs,
  const Node& rhs)
{
  return lhs.uid == rhs.uid;
}

但它编译失败的原因是它的多重定义。 我尝试了两种方法,它们都有效。 1将实现移动到cpp文件 2使这个操作符==静态函数。

大多数搜索结果都是关于第一个解决方案。 但我可以让它静止吗?哪个更好?

提前致谢〜

1 个答案:

答案 0 :(得分:4)

如果您已将该函数放入头文件中,则需要将其设为inline。否则,编译器将在使用它的任何源文件中吐出一个单独的副本,从而导致链接器冲突。

inline bool operator==(
  const Node& lhs,
  const Node& rhs)
{
  return lhs.uid == rhs.uid;
}