我重载了运算符>但它仍然说没有运营商匹配操作数

时间:2010-03-14 09:23:52

标签: c++ operator-overloading

我需要B类拥有AToTime对象的最小优先级队列。

AToTime有operator>,但是我收到的错误告诉我的是没有运营商>匹配操作数......

#include <queue>
#include <functional>

using namespace std; 

class B
{
  public:
    B();
    virtual ~B();
  private:
    log4cxx::LoggerPtr m_logger;
    class AToTime 
    {
    public:
      AToTime(const ACE_Time_Value& time, const APtr a) : m_time(time), m_a(a){}

      bool operator >(const AToTime& other)
      {
        return m_time > other.m_time;
      }

    public:
      ACE_Time_Value m_time;
      APtr           m_a;
    };

    priority_queue<AToTime, vector<AToTime>, greater<AToTime> > m_myMinHeap;
};

2 个答案:

答案 0 :(得分:9)

    bool operator >(const AToTime& other)

它应该是一个const函数。

    bool operator >(const AToTime& other) const 

答案 1 :(得分:1)

Kenny's answer已经向您展示了如何使这项工作。

请注意,我更愿意实现二进制运算符,它们将它们的操作数平等地处理(它们不会修改它们)作为自由函数:

inline bool operator>(const AToTime& khs, const AToTime& rhs)
{
  return lhs.m_time > rhs.m_time;
}

此外,通常用户希望所有关系运营商都存在,如果其中一个存在。由于std库主要需要operator<,除了相等之外,我会在operator<之上实现其他库:

inline bool operator<(const AToTime& khs, const AToTime& rhs)
{return lhs.m_time < rhs.m_time;}

inline bool operator>(const AToTime& khs, const AToTime& rhs)
{return rhs < lhs;}

inline bool operator<=(const AToTime& khs, const AToTime& rhs)
{return !(lhs > rhs);}

inline bool operator>=(const AToTime& khs, const AToTime& rhs)
{return !(lhs < rhs);}

inline bool operator==(const AToTime& khs, const AToTime& rhs)
{return lhs.m_time == rhs.m_time;}

inline bool operator!=(const AToTime& khs, const AToTime& rhs)
{return !(lhs.m_time == rhs.m_time);}