【发布时间】:2012-06-11 07:41:22
【问题描述】:
当尝试做一个 BOOST_CHECK_EQUAL(pair, pair) 时, gcc 没有找到 pair 的流操作符,尽管声明了它。 有趣的是 std::out 找到了操作符。
ostream& operator<<(ostream& s, const pair<int,int>& p) {
s << '<' << p.first << ',' << p.second << '>';
return s;
}
BOOST_AUTO_TEST_CASE(works)
{
pair<int,int> expected(5, 5);
pair<int,int> actual (5, 5);
std::cout << expected << std::endl;
std::cout << actual << std::endl;
BOOST_CHECK(actual == expected);
}
BOOST_AUTO_TEST_CASE(no_work)
{
pair<int,int> expected(5, 5);
pair<int,int> actual (5, 5);
BOOST_CHECK_EQUAL(actual, expected);
}
这不会编译错误:
... instantiated from here
../boost-atp/release/include/boost/test/test_tools.hpp:326:9: error: no match for ‘operator<<’ in ‘ostr << t’
【问题讨论】:
-
这里解释了为自定义类型定义自己的打印的新方法:stackoverflow.com/a/44810846/1617295 和 this is the official documentation 该功能。
-
@Raffi 这个问题看起来像这个问题的副本,细节较少。也许将其标记为重复并将您的答案移到此处是有意义的,这样我们就不会让用户跳来跳去?我也可以接受。谢谢!
标签: c++ boost boost-test