2017-01-30 142 views
1

我有2個班SM。當我嘗試使用Ostream <<和運算符 - =對於類?

cout << s3 -= m2; 

我得到心滿意足的錯誤:

沒有運營商 「 - =」 這些操作數相匹配的操作數類型是:性病:: ostream的 - =

class S 
{ 
public: 
    S& operator-=(M& m) 
    { 
     //my code 
     return *this; 
    } 
} 

我試過3個參數,包括ostream,但-=只有2個。 我該如何解決這個問題?

回答

4

這與operator precedence有關。 <<-=更高的優先級,從而

cout<<s3-=m2; 

被視爲

(cout << s3) -= m2; 

,而不是

cout << (s3 -= m2); 

您需要使用上述形式得到你想要的東西。

+0

我在想沒有演員可能有辦法。非常感謝! – Aria

0

您無法解決此問題。 c++中的運算符優先級規則是固定的,不能超載。

唯一可能的解決方案是更改使用的代碼。例如,如果你寫

cout << (s3 -= m2); 

那麼你的原代碼應該工作。另一種選擇是將線分成兩部分:

s3 -= m2; 
cout << s3;