1. 程式人生 > 其它 >運算子過載時遇到的問題:沒有找到可接受型別的左運算子

運算子過載時遇到的問題:沒有找到可接受型別的左運算子

技術標籤:C++學習c++

運算子過載時遇到的問題:沒有找到可接受型別的左運算子

*在學習運算子過載時,在書寫下列程式碼時,遇到問題:沒有找到接受型別的左運算元運算子(或沒有可接受的轉換)
VS2019報錯如下
在這裡插入圖片描述

#include<iostream>
#include<string>
#include<math.h>
using namespace std;
class T {
public:
	T(int n, int n2) :m(n), n(n2) {};
	friend T operator-(T& ,T& );
	friend
T operator+(T &,T&); T operator/(T); int a = 10; private: int m, n; }; T operator-(T &a,T &b) { int x1, x2; x1 = a.m - b.m; x2 = a.n - b.n; T C(x1, x2); return C; } T operator+(T &a,T &b) { int x1, x2; x1 = a.m + b.m; x2 = a.n + b.n; T C(x1, x2); return C; } T T::
operator/(T A) { int c=m / A.m; return T(c, 1); } int main() { T A(2, 4), B(8, 20), C(0, 0); C = A + B-A; C = A / B; }

後來在舍友的幫助下,我們成功得出我C語言沒學好的結論,修改程式碼如下

class T {
public:
	T(int n, int n2) :m(n), n(n2) {};
	friend T operator-(const T& ,const T& );
	friend T operator+(const T &,const T&
); T operator/(T); int a = 10; private: int m, n; }; T operator-(const T &a,const T &b) { int x1, x2; x1 = a.m - b.m; x2 = a.n - b.n; T C(x1, x2); return C; } T operator+(const T &a,const T &b) { int x1, x2; x1 = a.m + b.m; x2 = a.n + b.n; T C(x1, x2); return C; }

原來是在計算:C=A+B-A 時,按照順序從左到右,先計算A+B,運算子過載函式返回為一個臨時物件,把一個臨時物件作為函式引數,過載運算子“-”時,出現問題。因為臨時物件的值不能修改,所以加const修飾符後,就ok了。