我有2个课程S
和M
。当我尝试使用
cout << s3 -= m2;
我收到一个错误:
没有运算符“ - =”匹配这些操作数操作数类型是:std :: ostream - =
class S
{
public:
S& operator-=(M& m)
{
//my code
return *this;
}
}
我尝试了3个参数,包括ostream
,但-=
只有2个。
我该如何解决这个问题?
答案 0 :(得分:4)
这与operator precedence有关。 <<
的优先级高于-=
所以
cout<<s3-=m2;
被视为
(cout << s3) -= m2;
而不是
cout << (s3 -= m2);
您需要使用上面的表格来获得您想要的内容。
答案 1 :(得分:0)
你无法解决这个问题。 <{1}}中的运算符优先级规则是固定的,不能重载。
唯一可行的解决方案是更改使用代码。例如,如果你写
c++
然后您的原始代码应该有效。另一种选择是将线分成两部分:
cout << (s3 -= m2);