![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
а как же
? что вводим, Добавлено через 10 секунд ???? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Maryann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
целые числа . Например 1 2 3
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
В чём точно заключается ошибка? Не надо его перегружать! По моим расчётам нужно вводить 8 чисел... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| warmonger_ |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.7.2007 Где: г. Киев Репутация: 1 Всего: 3 |
Maryann, проверил этот код. работает. вывод:
и должно работать. Это сообщение отредактировал(а) warmonger_ - 23.1.2008, 16:09 --------------------
Make everything as simple as possible, but not simpler.Albert Einstein |
||||
|
|||||
| Maryann |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
вылетает сообщение gpe, ничего конкретного не говорится
да, 8: 1 2 3 4 1 2 3 4 например. Добавлено через 1 минуту и 58 секунд
это хорошо. Хорошо еще, что на экзамене компилировать не надо будет...эх |
||||||
|
|||||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Maryann, Вы можете назвать компилятор? Уже не в первый раз просим...
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| warmonger_ |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.7.2007 Где: г. Киев Репутация: 1 Всего: 3 |
archimed7592,
уже называли... --------------------
Make everything as simple as possible, but not simpler.Albert Einstein |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
неужели автору не кажется, что он "малёхо" староват? |
|||
|
||||
| student0511 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Вот тоже проблемы, подобного типа, при перегрузки операции + возвращает не готовый элемент, а элемент после удаления. Вот полный код:
Ошибок не выдаёт, но поля элемента M3 представляет не окончательный вариант, а вот что: MX: 0x00000000 -> CXX0030: Error: expression cannot be evaluated n: -858993460 m: -858993460 Компилятор: Visual C++ 6 1994 - 1998 г. А если добавить деструктор, то вообще вылетает с ошибкой. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
конструктор копирования определи. А вообще лучше определить в класе операции тип *=, где * это тип операции, и определить свободные ф-ии где эти операторы и будут вызваться. Но конструктор копирования в данном случае все равно необходим.
|
|||
|
||||
| student0511 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Чё-то я не догнал, а где использовать конструктор копирования? Вот я создаю temp, в последствии его поля заполняются как надо, но когда возвращается значение из функции, результат почему-то исчезает, т.е. он не переходит в M3, почему? Я же объявил конструктор, где выделяется память под необходимое поле (MX). И не очень мне ясно, что вы упомянули о свободных функциях и операциях тип *=, если можно по-подробнее, то очень бы хотелось. Заведомо премного благодарен!
Добавлено через 9 минут и 59 секунд Ну вот я написал конструктор копирования:
но тогда operator= не вызывается, а в выражении M3 = M1 + M2 вызывается сразу этот самый конструктор, не дав поработать operator+ 'у. |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
1. когда temp возвращается из ф-ии он копируется, и удаляется. А так как у тебя не переопределен конструктор копирования вызывается конструктор копирования по умолчанию, вследствии чего у тебя копируется указатель, который удаляется при удалении Temp. В результате в объекте который получен из temp содержится кривой указатель, который никуда не указывает.
2.
вот тебе пример, того, что я имел в виду Добавлено @ 09:53
вот такой у тнебя должен быть контсруктор копирования. Это сообщение отредактировал(а) vinter - 20.4.2008, 09:59 |
||||
|
|||||
| student0511 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Создал я такой конструктор копирования, написал operator+=(Matrix&), переписал соответствующим образом operator+(Matrix& rM), кстати, последний не может иметь более 1 аргументов, комп. ругается на operator+(Matrix& lM, Matrix& rM). Вот что в конечном образом получилось
Конструктор копирования
Перегруженный +=
И наконец-то operator+
И вот что получается при вызове конструктора копирования в строке Matrix temp(*this); передается *this уже пустой, т.е. MX 0xcccccccc -> CXX0030: Error: expression cannot be evaluated n -858993460 m -858993460 Вот последнего я что-то не пойму: почему именно так происходит?! Я немного ошибся, в конструктор в строчке Matrix temp(*this); копируется всё нормально, но вот когда возвращается результат trmp+=lM, то перед этим вызывается деструктор, который удаляет temp, а в конечный результат уже копируется, судя по всему, удалённый temp, что влечёт вызов конструктора без параметров и получаем M3: MX(NULL), n(0), m(0). Хотя без перегруженного деструктора результат тот же. Это сообщение отредактировал(а) student0511 - 20.4.2008, 14:15 |
||||||
|
|||||||
| vinter |
|
||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
операцию покажи которую ты выполняешь. |
||||||
|
|||||||
| student0511 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 26.3.2006 Репутация: нет Всего: нет |
Не не пашет, переделал, а результат остался прежним.
Вот весь текст программы
Выражение сложение двух объектов: M3 = (M1 + M2); , соответственно. Это сообщение отредактировал(а) student0511 - 20.4.2008, 14:48 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |