2016-05-21 12 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) { ... }としてそれらを持っていたが、私はすべてのconstを落とした:彼らは、私はこのエラーを取得し、自分で罰金コンパイルが、それらは以下の演算子に等しい(またはより大きい)を定義するために使用されている場合それがうまくいくかどうかを確認するための参照構文がありますが、私はちょうど型の問題を抱えていました。でも同じエラーが発生します。何が私は間違っているのですか?

た.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); } 

をまたそうでない場合は、あなたのクラスを使用して次の.cppファイルは、実装を見ていないので、インラインの利点を取ることができないような何かが、それはヘッダに置かれるべきinlineある場合。

+0

ありがとうございました!私はそれが私を理解するのに時間がかかるかもしれないと思う。 –

+0

に私があなたの答えを受け入れるでしょう、演算子は 'const'でなければなりません –

関連する問題