0

测试两个std::pair

BOOST_CHECK_EQUAL(std::make_pair(0.0,0.0), std::make_pair(1.0,1.0));

我重载了operator<<forstd::pair

std::ostream& operator<< (std::ostream& os, const std::pair<double,double>& t)
{
  return os << "( " << t.first << ", " << t.second << ")"; 
}

出现以下错误

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const std::pair<_Ty1,_Ty2>' (or there is no acceptable conversion)

怎么了?

4

1 回答 1

1

打开std namespace以便 ADL 可以找到它。

namespace std
{
ostream& operator<< (ostream& os, const pair<double,double>& t)
{
  return os << "( " << t.first << ", " << t.second << ")"; 
}
}

好的,我想通了。当它在当前命名空间中找到它正在寻找的名称时,名称查找会停止operator<<,这就是它无法在全局范围内找到你的原因,因为它operator<<已经找到了,namespace boost因为 boost 声明了operator<<.

我推荐阅读为什么我不能用 T=vector 实例化 operator<<(ostream&, vector&)?这有一个很好的解释。

于 2013-09-27T09:25:06.517 回答