2017-01-30 140 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;