сложение матриц 2х2 с перегрузкой операторов - PullRequest
2 голосов
/ 03 марта 2011

У меня есть следующий код. Код отлично работает без оператора + часть. Это дает мне

ошибка: нет совпадения для 'operator =' в 'final [i] [j] = (((matrix *) this) -> matrix :: mat [i] [j] + matr-> matrix :: mat [я] [J]) '

и

ошибка: нет совпадения для оператора << оператор << ’в ‘std :: cout << final [i] [j] </p>

#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;
}

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Это потому, что matrix final[2][2]; объявляет двумерный массив матриц, поэтому final[i][j] имеет тип matrix & и соответствующие операторы не определены.Вы должны иметь в виду double final[2][2];

1 голос
/ 03 марта 2011

Вам нужно написать 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. Он не делает то, что вы намереваетесь сделать!

0 голосов
/ 03 марта 2011

Вам необходимо определить оператор << для вашей матрицы. </p>

'final' определяется как массив 2x2 f 'matrix' (matrix final[2][2];)

Следовательно, cout << final[i][j]; ссылается на матричный объект.

...