回 帖 发 新 帖 刷新版面

主题:运算符的重载错误

有几个编译错误实在看不明白

回复列表 (共5个回复)

沙发

什么错误啊?

板凳


/*用运算符的重载写矩阵的输入输出,加法,减法,乘法
用rows,cols存放行列序号,并用new动态创建float型数组,用于存储矩阵中各元素的值,并重载()读出矩阵指定位置的值*/
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class matrix{
private:
    int rows;
    int cols;
    float* temp;
public:
    matrix(int a,int b):rows(a),cols(b)
    {temp=new float[8][8];}               //这一步老出错
    void inputm()
    {
        for(int i=0;i<rows;i++)
            for(int j=0;j<cols;j++)
                cin>>*(*(temp+i)+j);
    }
    /*
    istream& operator>>(istream&in,matrix & m)
    {
        for(int i=0;i<rows;i++)
            for(j=0;j<cols;j++)
                cin>>*(*(temp+i)+j);
    }
    */
    float operator()(int r,int c)        //重载(),很重要
    {
        return *(*(temp+r)+c);
    }
//--------------------------------------以下是友元函数,并非这个类的公有函数--------------------------------------
    friend matrix& operator+(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.rows==m2.rows&&m1.cols==m2.cols)
        { 
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m1.cols;j++)
                    m3(i,j)=m1(i,j)+m2(i,j);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend matrix& operator-(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.rows==m2.rows&&m1.cols==m2.cols)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m1.cols;j++)
                    m3(i,j)=m1(i,j)-m2(i,j);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend matrix& operator*(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.cols==m2.rows)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m2.cols;j++)
                    m3(i,j)=m1(i,j)*m2(j,i);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend ostream& operator<<(ostream&out,matrix& m)
    {
        for(int i=0;i<m.rows;i++)
        {
            for(int j=0;j<m.cols;j++)
                cout<<setw(9)<<m(i,j);
                cout<<endl;
        }
    }
};
void main()
{
    matrix A(2,3),B(2,3),C(3,2);
    A.inputm();
    B.inputm();
    C.inputm();
    /*cin>>A(2,3);
    cin>>B(2,3);
    cin>>C(3,2);*/
    cout<<"A+B="<<A+B;
    cout<<"A-B="<<A-B;
    cout<<"A*B="<<A*B;
    cout<<A+C;
}



3 楼


 new  只能申请一维的
二维数组不能止痒直接的

4 楼

楼上说的对,二维数组要用二维指针的
float**temp;
temp=new float*[rows];
for(int i=0;i<rows;i++)
  temp[i]=new float[cols];

释放时
for (int i = 0; i < rows; i++)
        delete [] temp[i];
    delete [] temp;

5 楼

谢谢
是这样的
这样改了之后就对了

我来回复

您尚未登录,请登录后再回复。点此登录或注册