Ваши значения являются мусором, потому что ваш конструктор не дает никаких значений вашим переменным.
Matrix()
{
m = new int *[10];
for (int i = 0; i < 10; i++)
{
m[i] = new int[10];
}
}
Нигде в этом конструкторе вы не дадите значения rows
, cols
, rows1
, rows2
, cols1
или cols2.
Так что неудивительно, что они имеют значения мусора.
Я полагаю, это должно быть
Matrix()
{
m = new int *[10];
for (int i = 0; i < 10; i++)
{
m[i] = new int[10];
}
rows = 10;
cols = 10;
}
Хотя я не понимаю, почему вы есть три строковые переменные и три переменные cols.
Другое недоразумение состоит в том, что у вас есть две переменные с именем rix
int main()
{
int rosx;
Matrix m1 = Matrix();
Matrix m2 = Matrix();
Matrix rix; // one variable called rix
istream &operator>>(istream &is, Matrix &m1)
{
//overloaded >> to input the values of a matrix
// PROBLEM IS HERE
Matrix rix; // another variable called rix
Очевидно, вы думаете, что это одна и та же переменная, но это не так. Две переменные в разных функциях - это разные переменные , даже если они имеют одинаковое имя .
Вот еще одно недоразумение
ostream &operator<<(ostream &os, Matrix &m)
{
Matrix rix;
for (int i = 0; i < rix.rows; i++)
{
for (int j = 0; j < rix.cols; j++)
os << m.m[i][j] << " ";
os << "\n";
}
return os;
}
По какой-то причине вы написали эту функцию в выведите переменную m
, но используя строки и столбцы из совершенно другой переменной с именем rix
. Это не имеет никакого смысла. Строки и столбцы должны быть получены из переменной m
, поскольку это матрица, которую вы пытаетесь напечатать.
На самом деле я просто царапаю поверхность. Этот код полон недоразумений. Вы должны рассмотреть, как работает C ++. В частности, как работают конструкторы, как работают переменные, и просто подумайте немного более логично о коде, который вы пишете Это имеет смысл.
Я бы начал снова. Во второй раз код будет лучше.