#include <iostream>
using namespace std;
class matrix
{
private:
int row;
int col;
int **data;
public:
matrix(int r=0,int c=0)
{
row=r;
col=c;
data=new int*[row];
for(int i=0; i<row; i++)
{
data[i]=new int [col];
}
}
friend void createMatrix (int row, int col, int num[], matrix& mat);
friend istream &operator>>(istream&in,matrix &mat);
friend ostream &operator<<(ostream&out,matrix &mat);
matrix operator+ (matrix mat)
{
matrix z(row,col);
if((row==mat.row)&&(col==mat.col))
{
for(int i=0 ; i<row ; i++)
{
for(int j=0 ; j<col; j++)
{
z.data[i][j]=data[i][j]+mat.data[i][j];
}
}
}
else
{
cout<<"Matrix that aren't the same size can't be added"<<endl;
}
return z;
}
};
ostream &operator<<(ostream&out,matrix &mat)
{
for(int i=0; i<mat.row; i++)
{
for(int j=0; j<mat.col; j++)
{
out<<mat.data[i][j]<<" ";
}
out<<endl;
}
return out;
}
istream &operator >>(istream &in,matrix& mat)
{
cout<<"Enter the size of your matrix"<<endl;
in>>mat.row;
in>>mat.col;
mat.data=new int*[mat.row];
cout<<"Enter the elements of your matrix"<<endl;
for(int x=0; x<mat.row; x++)
{
mat.data[x]=new int[mat.col];
}
for(int i=0; i<mat.row; i++)
{
for(int j=0 ; j<mat.col; j++)
{
in>>mat.data[i][j];
}
}
return in;
}
int main()
{
matrix x,y;
cin>>x>>y;
cout<<x+y<<endl;
return 0;
}
void createMatrix (int row, int col, int num[], matrix& mat)
{
mat.row = row;
mat.col = col;
mat.data = new int* [row];
for (int i = 0; i < row; i++)
mat.data[i] = new int [col];
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
mat.data[i][j] = num[i * col + j];
}
Когда я пытаюсь запустить, я получаю сообщение об ошибке:
|83|error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'matrix')|
но когда я меняю основной на:
matrix x,y,z;
cin>>x>>y;
z=x+y;
cout<<z<<endl;
return 0;
У меня нет проблем, хотя я не могу использовать это, потому что мне приходится делать около 14 различных перегрузок операторов. Я не уверен, что это ошибка кода или ошибка компилятора. Любая идея, что я могу сделать, чтобы решить это?