【问题标题】:C++ boost test can't test operator <C ++ boost测试无法测试运算符<
【发布时间】: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


    【解决方案1】:

    你应该使用正确的常量:

    friend bool operator<(const someclass& lhs, const someclass& rhs);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-22
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      相关资源
      最近更新 更多