Kirill
Вызов delete[] в функции расчета следа это бред полный. После этого объект переходит в неработоспособное состояние.
Vladislav
к слову, математический след по-английиски это trace а не track
Kirill
Эта функция вообще должна быть const.
Vladislav
Ned
вообще говоря, я руководствовался той логикой, что раз объект вызвал исключение, он уже неработоспособен и надо стереть память пока не поздно
Ned
однако придумал-таки ситуацию, где этого делать не стоит и постирал дилиты
Ned
а потом откатился к старой ветке
Kirill
Нет, это не так
Ned
так что спасибо, что внимательно читали и напомнили)
Ned
Ned
Kirill
Твой класс предназначен для хранения матриц произвольных размерностей. Ты решил добавить функцию-член для подсчета следа, который определен только для квадратных. У тебя два выбора. Либо ты просто выбрасываешь исключение при вызове этой функции для неквадратной матрицы, либо создаешь подкласс SquareMatrix и уже для него реализуешь эту функцию. Но тогда его конструктор будет другой.
Kirill
Второй вариант лучше не используй.
Ned
Kirill
Хорошее решение.
Ned
есть тут кто-нить ещё?
Ned
Vladislav
м?
Ned
Ned
слушай, я не понимаю, мы же можем вызывать константные методы для неконст объектов, так?
Ned
и никаких проблем быть не должно
Ned
однако я ловлю тучу проблем при вызове неконстантных методов для неконстантных объектов...
Ned
да и вообще тучу говна при вызовах
Ned
хз почму
Ned
главная проблема вот в чём. я не могу обратиться к this почему-то..
Ned
так, я короче повожусь ещё и напишу если че не так будет
Vladislav
тут, да, чем еще заняться воскресным вечером?)
Ned
нахер понедельничную тоску потому что
Vladislav
не должно быть проблем, а что компилятор пишет?
Ned
да я всё ещё со своими двойными скобками, короче
Vladislav
показывай код)
Ned
не, я чуть позже, плиз
Ned
тут есть что поправить
Vladislav
ok
Ned
итак, есть константный объект
Ned
оператор [] от него возвращает другой константный объект
Ned
оператор [] от второго возвращает константный тип
Ned
так схуяяле нельзя передавать this в первом операторе второму объекту?
Ned
ща буит код
Vladislav
второй объект должен принимать его как const
Ned
http://ideone.com/srjnK3
Ned
вот. смотри
Ned
в строчке 173 обращаемся к константе
Ned
вызывается строчка 135
Ned
объект константный!! оператор тоже константный! генерит константный подобъект
Ned
хуле ему не нравится?!
Ned
this в данном случае воспринимается как const *Matrix this.
Ned
тоесть неконстантный указатель на константный объект
Ned
всё заебись
Ned
даже для row вызывается константный конструктор
Vladislav
Matrix<T> *const _parent это константный указатель на Matrix<T>, а не указатель на константный Matrix<T>
Ned
а так и должно быть
Ned
указатель не должен меняться, а объект должен
Ned
это нормально, чтобы делать например A[0][0] = 0;
Vladislav
ну вот, а у тебя this указывает на объект, который нельзя менять (потому что из константного метода)
Ned
ага, ну ииии....?
Ned
сделать два разных row?
Vladislav
в твоем случае нужно два варианта row: обычный и const_row
Ned
константный и нет?
Ned
вот
Ned
блять
Ned
не хотел этого
Ned
очень
Ned
ааа
Vladislav
да, так же как и итераторы в stl
Vladislav
они тоже идут в двух вариантах из-за этого
Ned
сцуко, ну ладно ладно, спасибо
Ned
ничего, к утру допишу и константный и нет)
Ned
всё взлетит
Ned
а вот про итераторы не знал...
Ned
@isenbaev, я угадаю, если скажу, что ты не спишь потому что у тебя сейчас день?
Vladislav
7 вечера)
Ned
Vladislav
Ага, Калифорния
Ned
она ж где-то там вродь...
Vladislav
Она
Ned
а чем занимаешься?
Vladislav
Пишу на плюсах в фейсбуке, в отделе рекламной платформы
Yevhen