Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632

Перегрузка оператора -

01.09.2012, 16:49. Показов 3112. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка
C++
1
2
3
error C2678: бинарный "-": не найден оператор, принимающий левый операнд типа "const Date" (или приемлемое преобразование отсутствует)
1>          d:\projects\billing\billing\date.h(34): может быть "const Date &Date::operator -(const Date &)"
1>          при попытке сопоставить список аргументов "(const Date, Date)"
вот
реализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const Date &operator-(const Date &right);
 
 
//необходим для получения значения
//длительности звонка
const Date &Date::operator-(const Date &right)
{
Date New;
 
//если равны дни
//начала и конца звонка
if
(
(this->year == right.year)   &&
(this->month == right.month) &&
(this->day == right.day)
)
{
    New.hour = this->hour - right.hour;
    
    if(this->minute >= right.minute)
        New.minute = this->minute - right.minute;
    else
        {
            New.hour--;
            New.minute = this->minute + (60 - right.minute);
        }
 
    if(this->second >= right.second)
        New.second = this->second - right.second;
    else
        {
            New.minute--;
            New.second = this->second + (60 - right.second);
        }
        
        return New;
}
 
//если разные дни
//также учитывается случай,когда звонок начался
//в последний день одного месяца
//и закончился в первый день другого
    New.hour    = (23 - right.hour)   + this->hour;
    New.minute  = (60 - right.minute) + this->minute;
    New.second  = (60 - right.second) + this->minute;
    
    if(New.second >= 60)
        {
            New.minute++;
            New.second -= 60;
        }
        
    if(New.minute >= 60)
        {
            New.hour++;
            New.minute -= 60;
        }
        
    if(New.hour >= 24)
        {
            New.day++;
            New.hour -= 24;
        }
    
    return New;
}

и строки,в которых возникает ошибка
C++
1
2
Date timewise = call_start - LastCreditAdd;
Date not_free_duration = duration - free_minutes_on_weekend;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2012, 16:49
Ответы с готовыми решениями:

Перегрузка оператора []
Что не правильно я перегрузил? #include <iostream> #include <locale.h> using namespace std; struct S_List { char c; S_List...

Перегрузка оператора ==
Ввожу список из элементов char. Оператор == сравнивает только первый элемент списка, подскажите как сравнить все элементы списков и их...

Перегрузка оператора +
Написал для перегрузки оператора + class BoolMatrix { private: int feet; public: BoolMatrix(int f): feet(f) {} ...

26
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
01.09.2012, 18:50
Студворк — интернет-сервис помощи студентам
Я об этом писал в своем первом сообщении в этой теме, и автор сказал что уже делал так.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2012, 18:52
nexen, На одном компиляторе нет ошибки, на другом будет, третий взорвет компьютер.
C++
1
return &ROOM();
Если ROOM() возвращает объект - после конца этой строчки этот объект уничтожится - указатель будет указывать на место в памяти, где БЫЛ объект класса ROOM, а использование этого указателя (разыменование и использование объекта) - UB со всеми вытекающими отсюда последствиями.
1
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
01.09.2012, 18:54  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
В данном случае левый и правый операнд являются const
спасибо,может мне сделать 2 перегрузки оператора для константного и неконстантного
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
01.09.2012, 18:54
Цитата Сообщение от Toshkarik Посмотреть сообщение
Я об этом писал в своем первом сообщении в этой теме, и автор сказал что уже делал так.
Оу, видимо упустил, тогда извините.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
01.09.2012, 18:56
alexey31415, в данном случае Вы же не изменяете ни объект слева ни объект справа. А только создаете новый объект и возвращаете его. Здесь не нужна перегрузка, должно хватить функции:
Date Date::operator-( const Date &right ) const;
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2012, 19:05
alexey31415, Вообще, в разы логичнее (и правильнее) делать оператор op= членом класса, а оператор op свободной функцией, которая использует внутри себя оператор op=.

Что-то вроде.

http://liveworkspace.org/code/... 76b855a944
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.09.2012, 12:04
Цитата Сообщение от alexey31415 Посмотреть сообщение
необязательно
я пробывал возвращать не копию.а объект
Обязательно. С одним только унарные, но минус может быть и таким.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2012, 12:04

Перегрузка оператора ==
Создайте класс stroka. Класс должен включать поле (массив) типа char для хранения строки. Класс должен содержать: 1) конструктор без...

Перегрузка оператора ==
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора >
Добрый день! #include <stdio.h> #include <tchar.h> #include <iostream> template <typename T1, typename T2> bool ...

Перегрузка оператора ->
Здравствуйте, мне нужно реализовать перегрузку operator-> .Как реализован оператор ->? Что он делает понятно, а как?

Перегрузка оператора ^
Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс матрицы: template <class T> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru