Opened 4 years ago

Closed 4 years ago

#795 closed ожидается проверка (задача сдана)

WW #14

Reported by: ushakova.alina Owned by: Дмитрий Свиридкин
Component: WW_exceptions Version: 2.0
Keywords: Cc:

Description


Change History (4)

comment:1 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to ushakova.alina
Type: ожидается проверкаожидаются исправления
main.cpp:45:34: error: catching polymorphic type ‘class MatrixException’ by value [-Werror=catch-value=]
   45 |         } catch (MatrixException except) {



/home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/src/matrix.cpp:8:19: error: catching polymorphic type ‘class std::bad_alloc’ by value [-Werror=catch-value=]
    8 |     } catch (std::bad_alloc) {
      |                   ^~~~~~~~~
/home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/src/matrix.cpp:14:23: error: catching polymorphic type ‘class std::bad_alloc’ by value [-Werror=catch-value=]
   14 |         } catch (std::bad_alloc) {
      |                       ^~~~~~~~~
/home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/src/matrix.cpp: In member function ‘Matrix& Matrix::operator=(const Matrix&)’:
/home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/src/matrix.cpp:77:16: error: implicitly-declared ‘Matrix::Matrix(const Matrix&)’ is deprecated [-Werror=deprecated-copy]
   77 |     Matrix c = m;

При неудачном чтении, исходная матрица ломается.

Сообщения об ошибках требуется выводить в std::cout, а не cerr

В исключении стоит переопределить метод what, а не сделать новый.


7

comment:2 Changed 4 years ago by ushakova.alina

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from ushakova.alina to Дмитрий Свиридкин

comment:4 Changed 4 years ago by Дмитрий Свиридкин

Resolution: задача сдана
Status: assignedclosed
home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/src/matrix.cpp:63:16: error: implicitly-declared ‘Matrix::Matrix(const Matrix&)’ is deprecated [-Werror=deprecated-copy]
   63 |     Matrix c = m;
      |                ^
/home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/src/matrix.cpp:61:9: note: because ‘Matrix’ has user-provided ‘Matrix& Matrix::operator=(const Matrix&)’
   61 | Matrix& Matrix::operator=(const Matrix& m) {
      |         ^~~~~~

У вас есть оператор присваивания, но нет конструктора копий.
Зачем вы его в принципе свой собственный делали, если у вас для всех полей и так есть конструктор копий и оператор присваивания -- компилятор сделал бы все сам.

    height = c.height;
    width = c.width;
    std::swap(matrix, c.matrix);

Если делаете copy & swap -- то делайте до конца. Вдруг реализация деструктора изменится? Надо менять местами все поля.

Не надо указывать флаг -g в CMakeLists.txt. Для включения отладочной сборки запускайте cmake -DBUILD_TYPE=Debug

Под gcc санитайзеры не дружат с исключениями. Используйте valgrind.

При неудавшемся чтении элементов матрицы исходная матрица сломается.

Поле message в исключении должно быть приватным.


7.9

Note: See TracTickets for help on using tickets.