Я перегружен оператор>, но он по-прежнему говорит, что ни один оператор не соответствует операндам - PullRequest
3 голосов
/ 14 марта 2010

Мне нужен класс 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 ]

9 голосов
/ 14 марта 2010
    bool operator >(const AToTime& other)

Это должна быть постоянная функция.

    bool operator >(const AToTime& other) const 
1 голос
/ 14 марта 2010

Ответ Кенни уже показывает вам, как сделать эту работу.

Обратите внимание, что я бы предпочел реализовать бинарные операторы, которые одинаково обрабатывают свои операнды (они не изменяют их) как свободные функции:

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);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...