Доброго времени суток! У меня есть класс массив.
Я создаю массив
class Matrix
{
private:
int line, column, **mas;
public:
Matrix doTask(Matrix matrix);
Matrix(int n = 1, int m = 1 ) : line(n), column(m)
{
mas = new int*[n];
for (int i = 0; i < n; i++)
{
mas[i] = new int[m];
}
}
Matrix(const Matrix &masToCopy) // конструктор копирования
{
line = masToCopy.line;
column= masToCopy.column;
mas = new int*[line]; // для новой копии
for (int i= 0; i <line; i++)
mas[i] = new int[column];
for (int i = 0; i<line; i++)
for (int j = 0; j < column; j++)
mas[i][j] = masToCopy.mas[i][j];
}
friend istream& operator >> (istream &in, Matrix &el) //перегрузка >>
{
for (int i = 0; i < el.line; i++)
{
for (int j = 0; j < el.column; j++)
{
in >> el.mas[i][j];
}
}
return in;
}
friend ostream& operator << (ostream &out, Matrix &el) //перегрузка <<
{
for (int i = 0; i < el.line; i++)
{
cout << "\n";
for (int j = 0; j < el.column; j++)
{
out << el.mas[i][j];
cout << " ";
}
}
return out;
}
};
int main()
{
Matrix Task(4, 3);
cout << "\nВведите массив размером 4 на 3 \n";
cin >> Task;
cout << Task.doTask(Task);
}
И пытаюсь передать его в функцию, которая увеличивает все отрицательные нечетные числа в 2 раза
Matrix Matrix::doTask(Matrix matrix)
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; i < 3; j++)
{
if (matrix.mas[i][j] < 0 && matrix.mas[i][j] % 2 != 0)
{
matrix.mas[i][j] *= 2;
}
}
}
return matrix;
}
Но строчка с if вызывает исключение. Как это исправить?
В коде вывода написана белиберда
for (int i = 0; i < 4; i++)
{
for (int j = 0; i < 3; j++)
^
Отлавливать ошибки "по невнимательности" вы должны уметь самостоятельно. StackOverflow - это не сайт и разряда "найдите мои опечатки за меня". Удивляет также использование "магических констант" 4 и 3, в то время как у вас в классе есть поля, задающие размер массива.
Отдельно стоит заметить, что параметр оператора <<
должен быть ссылкой на константу
friend ostream& operator << (ostream &out, const Matrix &el)
^^^^^
иначе ваше cout << Task.doTask(Task);
является некорректным. (Он компилируется в MSVC лишь благодаря одному из расширений языка.)
Отдельный вопрос, как я уже писал в комментариях: что это за метод такой doTask
, который обрабатывает посторонний объект, а не *this
. Зачем тогда этот doTask
вообще является методом Matrix
, если с *this
он не работает вообще? Вот этот вызов в main
- Task.doTask(Task)
- это просто феерически странно. Зачем объект Task
передается сам в свой собственный метод? (Это совсем не обязательно является ошибкой в общем случае, но зачем это нужно именно в вашем случае - не ясно.)
Если вы уж хотите иметь такой метод, то сделайте так
Matrix Matrix::doTask() const
{
Matrix result(*this);
for (int i = 0; i < line; i++)
{
for (int j = 0; j < column; j++)
{
if (result.mas[i][j] < 0 && result.mas[i][j] % 2 != 0)
{
result.mas[i][j] *= 2;
}
}
}
return result;
}
и соответственно
cout << Task.doTask();
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется vector<vector<char>> и файл с текстомЦель: ввод этого текста в двумерный вектор
Задача - создать класс Группа, содержащий массив объектов класса Студент, и добавить в него меню для работы с группойЯ решил реализовать меню...
У меня есть таблица компании, таблица недвижимости и таблица с параметрами недвижимостиПри выборе недвижимости, например квартиры на съем,...