使用运算符重载添加 2x2 矩阵

发布于 2024-10-20 10:42:18 字数 1620 浏览 2 评论 0原文

我有以下代码。 代码在没有运算符 + 部分的情况下工作正常。 它给了我

错误:'final[i][j] = (((matrix*)this)->matrix::mat[i][j] + matr->matrix: 中的 'operator=' 不匹配:mat[i][j])'

错误:与“operator<<”不匹配在 'std::cout <<最终[i][j]

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>

using namespace std;


class matrix {

private :

int i,j;
double mat[2][2];


public :
matrix () {
}

void getdata();
double determinant();
matrix operator + (matrix &);

};

//getdata
void matrix :: getdata() {
cout <<"Please provide a 2x2 matrix :"<<endl;

    for (int i=0;i<2;i++) {
        for (int j=0;j<2;j++) {
cout <<"Give the elements of the matrix : "<<endl;
cin >> mat[i][j];
        }
        }
}

//compute determinant
double matrix :: determinant () {

double det;

det = mat[0][0]*mat[1][1] -mat[0][1]*mat[1][0];


cout <<"The determinant of the matrix is :"<<det<<endl;


}

//compute addition
matrix matrix ::operator +(matrix &matr) {
matrix final[2][2];
for (int i=0;i<2;i++) {
    for (int j=0;j<2;j++) {
final[i][j]=mat[i][j]+matr.mat[i][j];
    }
}
cout <<"The addition of the two matrices is :"<<endl;

for (int i=0;i<2;i++) {
    for (int j=0;j<2;j++){
cout << final[i][j];
    }
cout <<endl;
}

}


int  main()
{
   matrix pinakas1,pinakas2;
   pinakas1.getdata();
   pinakas2.getdata();
   pinakas1.determinant();
   pinakas2.determinant();
   pinakas1+pinakas2;


    return 0;
}

I have the following code.
The code works fine without the operator + part.
It gives me

error: no match for ‘operator=’ in ‘final[i][j] = (((matrix*)this)->matrix::mat[i][j] + matr->matrix::mat[i][j])’

and

error: no match for ‘operator<<’ in ‘std::cout << final[i][j]

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>

using namespace std;


class matrix {

private :

int i,j;
double mat[2][2];


public :
matrix () {
}

void getdata();
double determinant();
matrix operator + (matrix &);

};

//getdata
void matrix :: getdata() {
cout <<"Please provide a 2x2 matrix :"<<endl;

    for (int i=0;i<2;i++) {
        for (int j=0;j<2;j++) {
cout <<"Give the elements of the matrix : "<<endl;
cin >> mat[i][j];
        }
        }
}

//compute determinant
double matrix :: determinant () {

double det;

det = mat[0][0]*mat[1][1] -mat[0][1]*mat[1][0];


cout <<"The determinant of the matrix is :"<<det<<endl;


}

//compute addition
matrix matrix ::operator +(matrix &matr) {
matrix final[2][2];
for (int i=0;i<2;i++) {
    for (int j=0;j<2;j++) {
final[i][j]=mat[i][j]+matr.mat[i][j];
    }
}
cout <<"The addition of the two matrices is :"<<endl;

for (int i=0;i<2;i++) {
    for (int j=0;j<2;j++){
cout << final[i][j];
    }
cout <<endl;
}

}


int  main()
{
   matrix pinakas1,pinakas2;
   pinakas1.getdata();
   pinakas2.getdata();
   pinakas1.determinant();
   pinakas2.determinant();
   pinakas1+pinakas2;


    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

辞慾 2024-10-27 10:42:19

您需要定义一个 <<矩阵的运算符。

'final' 被定义为 2x2 数组 f 'matrix' (matrix Final[2][2];)

因此 cout << Final[i][j]; 引用一个矩阵对象。

You need to define a << operator for your matrix.

'final' is defined as a 2x2 array f 'matrix' (matrix final[2][2];)

Therefore cout << final[i][j]; references a matrix object.

站稳脚跟 2024-10-27 10:42:18

这是因为 matrix Final[2][2]; 声明了一个二维矩阵数组,因此 final[i][j] 的类型为 matrix & ; 且相关运算符未定义。您的意思一定是 double final[2][2];

That's because matrix final[2][2]; declares a 2-d array of matrices, so final[i][j] is of type matrix & and the relevant operators aren't defined. You must have meant double final[2][2];

初见你 2024-10-27 10:42:18

您需要将 operator+ 编写为,

matrix matrix ::operator +(const matrix &matr) 
{
    matrix final;
    for (int i=0;i<2;i++) 
    {
        for (int j=0;j<2;j++) 
        {
            final.mat[i][j]=mat[i][j]+matr.mat[i][j];
        }
    }
    return final;
}

使用 final.mat 来访问实际的数据成员。另外,matrix Final[2][2] 声明matrix 类型的二维数组。它没有做你想做的事!

You need to write operator+ as,

matrix matrix ::operator +(const matrix &matr) 
{
    matrix final;
    for (int i=0;i<2;i++) 
    {
        for (int j=0;j<2;j++) 
        {
            final.mat[i][j]=mat[i][j]+matr.mat[i][j];
        }
    }
    return final;
}

Use final.mat to access the actual data member. Also matrix final[2][2] declares two dimensional array of type matrix. It doesn't do what you intend it to do!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文