運算子過載時遇到的問題:沒有找到可接受型別的左運算子
阿新 • • 發佈:2020-12-19
運算子過載時遇到的問題:沒有找到可接受型別的左運算子
*在學習運算子過載時,在書寫下列程式碼時,遇到問題:沒有找到接受型別的左運算元運算子(或沒有可接受的轉換)
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了。