【发布时间】:2018-01-05 19:13:13
【问题描述】:
我在使用 Boost C++ 单元测试框架时遇到问题。这是 文件 someclass.h
class someclass {
public:
someclass(int a_x, int b_x);
someclass();
friend bool operator<(someclass& lhs, someclass& rhs);
friend ostream& operator<<(ostream& stream, const someclass& sa);
private:
int a;
int b;
};
这是 someclass.cpp 文件
#include <iostream>
#include <ostream>
#include <vector>
#include <tuple>
using std::cout;
using std::endl;
using std::vector;
using std::ostream;
#include "someclass.h"
someclass::someclass(int a_x, int b_x)
:a(a_x), b(b_x)
{
}
//-------------------------------------------------------
someclass::someclass()
{
}
//-------------------------------------------------------
bool operator<(someclass& lhs, someclass& rhs)
{
return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b);
}
//-------------------------------------------------------
ostream& operator<<(ostream& stream, const someclass& rhs)
{
stream << "(" << rhs.a << "," << rhs.b << ")";
return stream;
}
这是测试它的程序:
#define BOOST_TEST_MODULE test_someclass
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
#include <ostream>
using std::ostream;
#include "someclass.h"
BOOST_AUTO_TEST_CASE( someclass_lt )
{
someclass sa1(1,4);
someclass sa2(1,5);
someclass sa3(2,3);
someclass sa4(2,4);
someclass sa5(2,5);
BOOST_TEST( sa1 < sa2 );
BOOST_TEST( !(sa2 < sa1) );
BOOST_TEST( sa1 < sa3 );
BOOST_TEST( sa1 < sa4 );
BOOST_TEST( sa1 < sa5 );
}
文件 someclass.cpp 可以自己编译,但是当我尝试编译 整件事在一起,我得到了一大堆错误消息,其中部分内容是,
In file included from testsomeclass.cpp:9:0:
someclass.h:6:19: note: bool operator<(someclass&, someclass&)
friend bool operator<(someclass& lhs, someclass& rhs);
^
someclass.h:6:19: note: no known conversion for argument 1 from ‘someclass’ to ‘someclass&’
我已经尝试了所有我能想到的方法来纠正这个问题,但无济于事。 我还在 stackoverflow.com 和许多其他网站上进行了搜索,但均无济于事。 有人可以告诉我出了什么问题以及如何解决吗?谢谢。
布鲁斯
【问题讨论】:
标签: c++ unit-testing boost