2011-10-12 51 views
1

中的指針的操作符我想重載'>'操作符參數中的指針,但是我得到一個錯誤,說「操作符>必須至少有一個類型類的參數」。如果我不使用指針,我不會得到那個錯誤。重載參數

注意:S1是一個typedef'd結構,以及elem。

bool operator>(S1 const *V1, S1 const *V2){ 
    if (V1->elem->code > V2->elem->code) 
     return true; 
    return false; 
} 

我使用的是運營商的情況下,像這樣的,例如:

S1 * funct(S1 *var1, S1 *var2){ 
    if (var1 > var2) 
     return var1; 
    return var2; 
} 
+0

爲什麼不使用引用和取消引用來進行比較?即。 'if((* var1)>(* var2))' – GWW

回答

1

編譯器會想要把你的例子爲比較兩個指針值。將一個參數作爲類類型將告訴它需要知道解決過載的方法。

bool operator>(const S1& V1, const S1& V2){ 
    if (V1.elem->code > V2.elem->code) 
     return true; 
    return false; 
} 

S1 * funct(S1 *var1, S1 *var2){ 
    if (*var1 > *var2) 
     return var1; 
    return var2; 
} 

而且,我對這個有點生疏,但我認爲你必須聲明運營商作爲S1的朋友,或使它成爲一個memeber。

+0

它不需要成爲任何其他功能的朋友或成員。如果它試圖訪問S1的私人或受保護成員,它只需要成爲朋友。 – Mankarse

+0

啊,好的,謝謝,@Mankarse。自從我做了其中一個不是成員的人之後已經有一段時間了。 – kylben

+0

我不確定Mankarse的答案,但這個解決方案似乎對我有用。謝謝 – MrRoy

2

這不起作用,因爲operator<已經爲指針定義。在內置類型上重載運算符是不可能的,因爲所有對內建類型有意義的運算符都已經定義好了。

1

在我看來,當你想定義一個有多個參數的新操作符時,你必須做兩件事情。

  1. 重載操作符必須在類的外部定義。
  2. 重載操作符必須聲明爲類的朋友函數或類。

這是我的經驗。