error: non-member function ‘bool operator<=(const Time&)’ cannot have cv-qualifier
您可以常量預選賽不能添加到非成員函數。 讓我來解釋一下爲什麼
成員函數後的const保證這個函數不會改變任何成員變量this
。現在,如果您沒有任何this
的引用,靜態函數將會保證什麼?
error: ‘bool operator<=(const Time&)’ must take exactly two arguments
有兩種重載操作符的方法。你可以讓他們的成員函數(不帶靜電),但如果你想比較int
和Time
例如..讓我們將它寫出來:
在Time類
,寫出下列操作:
bool operator<=(int rhs) const {return this.minutes <= rhs;}
現在,讓我們比較我們的數據:
Time time;
int integer;
if(time <= integer) {} //This will compile
if(integer <= time)() //This will not compile
讓我們看看這是爲什麼:
if(time <= integer) {} //Will expand to this:
if(time.operator<=(integer)) {}
現在你能猜到這是什麼嗎?
if(integer <= time) {} //Will expand to this:
if(integer.operator<=(time)) {}
有沒有這樣的操作對於像整數默認類型,你不能只是簡單地添加一個整數類型。
對此的解決方案是靜態運算符。 爲了掩蓋這兩種情況下(INT < =時間和時< = INT) 你可以這樣寫操作,以及在你的Time類
static bool operator<=(int lhs, const Time& rhs) {};
的參數是比較的左側的右側比較。
我也建議你看一看juanchopanza的鏈接:
See more on operator overloading here .
和this link成員函數運營商和非成員函數運營商之間的差異。
@juanchopanza _'Drop最後const'_當然?較少/相等的比較運算符不應該改變底層類中的任何內容以返回正確的結果。 –
@πάνταῥεῖ這是非會員。 – juanchopanza
@juanchopanza不是從sig所示的(但是從錯誤信息當然是D!) –