2016-05-21 3 views
-1

У меня возникли проблемы с перегрузкой меньше и выше операторов. они скомпилироваться сами по себе, но когда они используются для определения меньше или равно операторов (или больше), я получаю эту ошибку:нет совпадений для 'operator>'

error: no match for ‘operator>’ (operand types are ‘Job*’ and ‘Job’) 
inline bool Job::operator<= (Job rhs) { return !(this > rhs); } 

я изначально имел их operator(const Job& rhs) { ... }, но я бросил все Конст и ссылочный синтаксис, чтобы увидеть, будет ли он работать, и у меня были проблемы с типом .. но даже точно так же, как и у меня такая же ошибка. Что я делаю не так??

вот код:

.cpp:

#include "Job.h" 

void Job::setId(int i) { id = i; } 
const int Job::processes() const { return process; } 
const int Job::ticks() const { return tick; } 

inline bool Job::operator< (Job rhs) { return (process * tick) < (rhs.processes() * rhs.ticks()); } 
inline bool Job::operator> (Job rhs) { return (process * tick) > (rhs.processes() * rhs.ticks()); } 
inline bool Job::operator<= (Job rhs) { return !(this > rhs); } 
inline bool Job::operator>= (Job rhs) { return !(this < rhs); } 

.h:

#include <string> 

class Job { 
public: 
    Job (std::string desc, int procs, int tcks) 
      : description{ desc }, process{ procs }, tick{ tcks }{}; 
    void setId(int id); 
    const int ticks() const; 
    const int processes() const; 

private: 
    std::string description; 
const int process; 
const int tick; 
int id; 

bool operator<(Job rhs); 
bool operator>(Job rhs); 
bool operator<=(Job rhs); 
bool operator>=(Job rhs); 
}; 

ответ

0

this является указателем на объект, а не сам объект. Таким образом, это должно работать:

inline bool Job::operator<= (Job rhs) { return !(*this > rhs); } 

Кроме того, если что-то inline следует поместить в заголовках, так как в противном случае следующий .cpp используя ваш класс не может увидеть реализацию и тем самым не воспользоваться инлайн.

+0

Спасибо! Думаю, мне понадобилось время, чтобы разобраться. Я отвечу на ваш ответ, когда он позволяет мне также –

+0

, оператор должен быть 'const' –