60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
||||||||||||||||
1 | ||||||||||||||||
Перегрузка оператора -01.09.2012, 16:49. Показов 2043. Ответов 26
Метки нет (Все метки)
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка
реализация
и строки,в которых возникает ошибка
0
|
01.09.2012, 16:49 | |
Ответы с готовыми решениями:
26
Перегрузка оператора [] Перегрузка оператора == Перегрузка оператора + Перегрузка оператора == |
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 17:07 | 2 |
А у тебя есть коструктор копирования?
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
01.09.2012, 17:10 | 3 | |||||
Объявите функцию как const:
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
01.09.2012, 17:40 [ТС] | 4 |
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 17:42 | 5 |
Тогда выкладывайте весь код.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
01.09.2012, 17:47 | 6 |
Бинарный оператор, производящий новый результат из двух неизменяемых операндов, очевидно, должен возвращать не ссылку на переменную, которая умирает сразу после окончания работы оператора, а копию, т. е. не const Date&, а Date. И таки да, такой оператор сам должен иметь модификатор const, так как левый операнд он не изменяет.
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 17:49 | 7 |
Если я правильно помню, то бинарные оператора перегружаются с двумя аргументами. Добавь второй аргумент const Date &second и замени все this->field на second.field.
Nick Alte, не всегда они умирают. Бывает, выживают некоторое время или до входа в другую функцию (недавно сталкивался)
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 18:02 | 8 |
nexen, умирают сразу после выхода из функции. Никаких иногда. Просто по этому адресу еще может хранится это же значение.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
01.09.2012, 18:06 | 9 |
Ну для тривиальных типов это неудивительно, но я-то имел в виду, что формально, с точки зрения стандарта, на момент возврата в место вызова переменная перестаёт существовать. Нельзя же в самом деле всерьёз писать программу, рассчитывая на такой побочный эффект.
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
01.09.2012, 18:08 [ТС] | 10 |
необязательно
я пробывал возвращать не копию.а объект Добавлено через 42 секунды я всё выложил,что нужно,в других местах никаких ошибок
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 18:08 | 11 |
У меня в чате поиск комнат написан примерно так :
ROOM* func() { for (iterator x=begin; x!=end; ++x) if ((*x).room == ROOM_THAT_I_NEED) return *x; return &ROOM(); // я знал, что так не безопастно, но решил проверить. В итоге ни одной ошибки за 30 часов работы. Используется эта комната ещё хренову тучу времени, которого хватило бы, чтобы перезаписать блок памяти (если верить тебе). Да, возможно мне просто повезло и этот блок памяти не трогался, но таких переменных было много. На каждое соединение по ~3. }
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 18:08 | 12 |
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 18:10 | 13 |
alexey31415,
http://habrahabr.ru/post/132014/ Два параметра http://www.amse.ru/courses/cpp2/2010_11_22.html Два параметра Более того, тебе так и написано " при попытке сопоставить список аргументов "(const Date, Date)""
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 18:14 | 14 |
nexen, оператор может быть элемент-функцией класса. В этом случае принимается лишь один параметр - операнд стоящий справа.
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 18:17 | 15 |
Да, но когда принимается const Date и Date (без const) - то нужно ПРЯМО указывать оба аргумента, другое дело при const Date/const Date или Date/Date
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
01.09.2012, 18:26 [ТС] | 16 |
два параметра используются при объявлении,если функция глобальная
не подскажите тогда,как укзаать два аргумента?
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 18:29 | 17 |
alexey31415, читай на три поста выше. Я указал две ссылки. Там всё четко прописано
p.s Как это "глобальная функция", если мы говорим о классе Date?
0
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
01.09.2012, 18:38 [ТС] | 18 |
в этом случае функция будет глобальной.а мне нужно,чтобы она осталась методом класса
может мне нужно использовать другой параметр в функции Добавлено через 6 минут как я понимаю всё из-за того,что я перадю один из параметров вызываемой функции по константной ссылке.а потом вычитаю из этой переменной другую,но как это исправить я не знаю
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|||||||||||
01.09.2012, 18:40 | 19 | ||||||||||
nexen,
Добавлено через 2 минуты Или Вы хотите сказать что компилятор не может привести Date к const Date? Данные неявные преобразования допустимы, так же как и:
1
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
01.09.2012, 18:49 | 20 |
Toshkarik, Date к const Date да, но не наоборот. Что-то я так и не разглядел в реализации спецификатор const у оператора
0
|
01.09.2012, 18:49 | |
01.09.2012, 18:49 | |
Помогаю со студенческими работами здесь
20
Перегрузка оператора == Перегрузка оператора > Перегрузка оператора -> Перегрузка оператора ^ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |