Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 00:09   #1
Shandr71
 
Регистрация: 14.12.2011
Сообщений: 3
Восклицание Перегрузка

Нужна помощь с прогой:
http://liveworkspace.org/code/4c956f...e51ca90fed4520
Не работает перегруженный оператор =.
Заранее спасибо всем, кто поможет.
Shandr71 вне форума Ответить с цитированием
Старый 14.12.2011, 22:00   #2
htonasral
Пользователь
 
Регистрация: 19.12.2007
Сообщений: 18
По умолчанию

Скажу сразу, оператор присваивания работает.
У меня компилятор MS Visual studio 2008. Сначала начал ругаться на функцию принт, ты там неправильно поставил значения по умолчанию(т.е. они должны были у тебя стоять в объявлении в классе, а не в описании).
Зато появилась другая проблема:
Запустив программу снова, компиль начал ругаться на удаление блока памяти, запустив отладчик я выяснил что он ругается на деструктор, а именно на строчку delete last_el;.
Ну а дальше копай сам. К стати без деструктора все работает.
Да и еще тебе вопрос, что будет, если сделать самоприсваивание?


З.Ы. Всегда читай ошибки, которые выдает тебе компилятор, ну и работай с отладчиком вещь незаменимая в отловке ошибок.

Ах да код прилагаю, он выводит два твоих списка, только ругается на их удаление.
http://liveworkspace.org/code/d89939...56108a38691a67

Последний раз редактировалось htonasral; 14.12.2011 в 22:03.
htonasral вне форума Ответить с цитированием
Старый 15.12.2011, 10:01   #3
Shandr71
 
Регистрация: 14.12.2011
Сообщений: 3
По умолчанию

Спасибо за помощь, дестрктор поправил, но проблема осталась: в моей проге до строки return *this; все идет нормально, список получается красивый, выводится, но вышеуказанный оператор возвращает в main мусор.
Shandr71 вне форума Ответить с цитированием
Старый 15.12.2011, 16:49   #4
htonasral
Пользователь
 
Регистрация: 19.12.2007
Сообщений: 18
По умолчанию

Хотелось бы подробнее узнать какой именно мусор выводится в программе?
Ах да, ты так и не ответил, что будет если сделать самоприсваивание(разумеется с рабочим деструктором)?
htonasral вне форума Ответить с цитированием
Старый 15.12.2011, 22:00   #5
Shandr71
 
Регистрация: 14.12.2011
Сообщений: 3
По умолчанию

Например, 0 157564488 157564504 157564520 157564536.
С самоприсваиванием что-то не могу догадаться, подскажи.
Shandr71 вне форума Ответить с цитированием
Старый 15.12.2011, 22:16   #6
htonasral
Пользователь
 
Регистрация: 19.12.2007
Сообщений: 18
По умолчанию

Если выводится такой мусор, мне кажется неправильно работает деструктор, он удаляет данные до того, как ты их выводишь. Попробуй закомментировать реализацию деструктора и посмотреть что будет выводить программа, если выводит норм начинай шевелить деструктор, если тот же мусор, то проблема в выделении памяти для новых данных при копировании.
На счет самоприсваивания, даю подсказку:
Ты передаешь в функцию самого себя, то есть указатель this, но первая строчка у тебя данные указателя this удаляют, что в таком случае будет создаваться при присваивании??
htonasral вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка [] Lazy maximka Помощь студентам 8 02.05.2011 10:43
перегрузка [] zhenya.ya Общие вопросы C/C++ 0 10.04.2011 23:44
C++ Перегрузка GLAM1 Общие вопросы C/C++ 7 01.04.2011 15:49
перегрузка alema Общие вопросы C/C++ 2 28.10.2009 21:20
Перегрузка ++ counter Общие вопросы C/C++ 3 20.12.2008 13:30