Я создал класс матриц и перегрузил для него операцию ++ (прибавление к матрице единичной матрицы), но почему то программа не работает, при запуске выдаёт ошибку detected before normal block... Если убрать операцию ++, то всё работает.
В чём ошибка и как её исправить? UPD. Ошибки исправил, всё работает.
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
class Matrix
{
int *matrix;
int n;
public:
Matrix(int);
Matrix()
{
matrix = NULL;
}
int &operator()(int i, int j)
{
return matrix[i *n + j];
}
friend ostream &operator<< (ostream &s, const Matrix &c); // перегруженный оператор вывода
friend istream &operator >> (istream &s, Matrix &c); // перегруженный оператор ввода
~Matrix() // десструктор класса Matrix
{
delete[] matrix;
}
friend Matrix& operator++(Matrix&);//оператор ++
friend Matrix& operator++(Matrix&, int);
Matrix &operator=(Matrix &c);
};
Matrix::Matrix(int an) // конструктор с параметрами
{
n = an;
matrix = new int[n*n];
}
Matrix &Matrix::operator=(Matrix &c)
{
for (int i = 0; i < c.n; i++)
{
for (int j = 0; j < c.n; j++)
{
this->matrix[i *( this->n) + j] = c.matrix[i * c.n + j];
}
}
return *this;
}
istream& operator >> (istream &s, Matrix &c)//ВВОД
{
for (int i = 0; i<c.n; i++)
{
for (int j = 0; j<c.n; j++)
{
s >> c.matrix[i*c.n + j];
}
}
return s;
}
ostream &operator<< (ostream &s, const Matrix &c)//ВЫВОД
{
for (int i = 0; i<c.n; i++)
{
for (int j = 0; j<c.n; j++)
{
s << setw(5) << c.matrix[i * c.n + j];
}
s<<'\n';
}
return s;
}
Matrix& operator++( Matrix&c) //ОПЕРАЦИЯ ++M
{
for (int i = 0; i < c.n; i++)
c.matrix[i * c.n + i]++;
return c;
}
Matrix& operator++(Matrix&c, int) //ОПЕРАЦИЯ M++
{
Matrix Y(c.n);
Y = c;
for (int i = 0; i < c.n; i++)
c.matrix[i * c.n + i]++;
return Y;
}
void main()
{
setlocale(LC_ALL, "");
int n;
cout <<"Введите размер матрицы:"<<'\n';
cin >> n;
Matrix A(n);
cout << "Введите элементы матрицы:" << '\n';
cin >> A;
cout << "Матрица:" << '\n';
cout << A << '\n';;
Matrix Z(n);
Z = A;
cout << "Копия матрицы:" << '\n';
cout << Z << '\n';;
cout << "++Матрица:" << '\n';
cout << (Z = ++A) << '\n';;
cout << "Матрица++:" << '\n';
cout << (Z = A++) << '\n';;
system("pause");
}
У вас странное обращение к элементам матрицы.
Вместо:
for (int i = 0; i<k; i++)
{
this->matrix[(i - 1)*k + i - 1]++;
}
Попробуйте:
for (int i = 0; i < k; i++)
{
for (int j = 0; j < k; j++)
{
if ( i == j ) { this->matrix[ i * k + j ]++; }
}
}
Тоже самое касается всех ваших обращений к элементам матрицы во всех остальных операторах.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В программе на C++ идёт непрерывный поток кадров в формате jpeg (снимает вебкамера)Кадры на диск не попадают, всё в буфере
Думаю, вы не учли, что обратный слеш внутри строковых литералов имеет особое значениеЛибо заэкранируйте их:
В линуксе консольные приложения часто выводят свой прогресс подобием такого: [####___] 50%, при этом надпись "обновляется" на том же месте в терминале,...