C++运算符重载问题

月光散落 发布于 2016/04/27 19:26
阅读 176
收藏 0

我重载了Matrix类的+ 和 =,

    friend Matrix operator + (Matrix &a,Matrix &b);

    Matrix& operator = (Matrix &b);

但语句 matrix1 = matrix2+matrix3;出错

[Error] no match for 'operator=' (operand types are 'Matrix' and 'Matrix')

代码:

#include<iostream>
using namespace std;


//write your code here
class Matrix{
  private:
    int arr[3][3];
  public:
    friend istream& operator >> (istream& in,Matrix &matrix);
    friend ostream& operator << (ostream& out,const Matrix& matrix);
    friend Matrix operator + (Matrix &a,Matrix &b);
    void setArr(int i,int j,int data){
        arr[i][j] = data;
    }
    int getArr(int i,int j){
        return arr[i][j];
    }
    Matrix& operator = (Matrix &b);
};
istream& operator >> (istream& in,Matrix &matrix)
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            in >> matrix.arr[i][j];
    return in;
}
ostream& operator << (ostream& out,const Matrix &matrix){
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
            out << matrix.arr[i][j] << " ";
        out << endl;
    }       
    return out;
}
Matrix operator + (Matrix &a,Matrix &b){
    Matrix temp;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            temp.setArr(i,j,(a.getArr(i,j)+b.getArr(i,j)));
    return temp;
        
}
Matrix& Matrix::operator = (Matrix &b){
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            arr[i][j] = b.getArr(i,j);
    return *this;
}
int main()
{
Matrix a1,a2,a3,a4;
cin >> a1;
cin >> a2;
a4 = a2;
a3 = (a1+a4); //这里出错了 
cout << a1 << endl;
cout << a2 << endl;
cout << a3 << endl;
return 0;
}

加载中
0
张亦俊
张亦俊
你重载的=是public么?
0
xpbob
xpbob
你先把重载的=注释掉,先看看+号返回的对象对不对,因这里识别=后面是两个参数,好像+号没有成功
0
土卫十六
土卫十六
你重载时的函数定义贴出来看看,说不定语法就不对。
月光散落
月光散落
代码贴出来了,能帮我看看吗?多谢
返回顶部
顶部