2017-01-30 13 views
1

私は2クラスSMを持っています。 - =Ostream <<および演算子 - =クラスですか?

class S 
{ 
public: 
    S& operator-=(M& m) 
    { 
     //my code 
     return *this; 
    } 
} 
のstd :: ostreamに: - "=" これらのオペランドのオペランドの型があると一致し

なしオペレータ:私は

cout << s3 -= m2; 

を使用しようとすると、私はsatesはというエラーを取得します

私はostreamを含む3つのパラメータを試しましたが、-=は2つしかありません。 どうすればこの問題を解決できますか?

答えて

4

これはoperator precedenceに関係しています。 <<はそう

cout<<s3-=m2; 

は、あなたが望む結果を得るために上記のフォームを使用する必要が

(cout << s3) -= m2; 

なく

cout << (s3 -= m2); 

として扱われ-=よりも優先順位が高いです。

+0

キャストなしの方法があるかもしれないと思っていました。どうもありがとう! – Aria

0

あなたがこの問題を解決する方法がありません。 c++のオペレータ優先ルールは固定されており、オーバーロードすることはできません。

唯一の可能な解決策を使用してコードを変更することです。たとえば、あなたが書く場合

cout << (s3 -= m2); 

あなたの元のコードが動作するはずです。別のオプションは、2つの行を分割されます。

s3 -= m2; 
cout << s3; 
関連する問題