为什么不可以这样改?

class MyClass{

public:

MyClass(int t=0):m(t){   }

friend MyClass operator-(MyClass,MyClass);

int Getm()const

{

   return m;

}

private:

int m;

};
MyClass operator-(MyClass t1,MyClass t2)

{

//ERROR**********found**********

return t1-t2;

//这里答案改成了return MyClass(t1.m-t2.m) 为什么不能直接改成return t1.m-t2.m

这需要看你的方法的返回值是什么

return MyClass(t1.m-t2.m);

这个返回的是MyClass类型的值,而

return t1.m-t2.m;

可能只是返回了一个int或者float类型的值。

1.t1和t2都是class,所以当然不能直接相减,除非运算符重载之后才可以,你这函数本来就是用于运算符重载,不能自己调用自己
2.减法返回类型是myclass,不是int,你t1.m-t2.m减完是个int啊