Форум программистов, компьютерный форум CyberForum.ru

Не получается перегрузить << - C++

Восстановить пароль Регистрация
 
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
02.07.2014, 10:01     Не получается перегрузить << #1
Добрый день. Никак не получается вывести разность a-b. Однако компилятор не ругается, если выводить только один объект.

Хедер с объявлением класса
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
class timeClass
{
public:
    timeClass(int h = 0, int m = 0)
    {
        min = 60*h+m;
        if(min >= 1440)
        {
            min = 0;
        }
    }
    friend ostream& operator<<(ostream&, timeClass&);
    timeClass& operator+(timeClass& tc)
    {
        min = (min+tc.min);
        return *this;
    }
    timeClass operator-(timeClass& tc)
    {
        min = abs(min-tc.min);
        return *this;
    }
    
 
    int min;
};
 
ostream& operator<<(ostream& stream, timeClass& tc)             
    {
        stream << tc.min/60 << ':' << tc.min%60;
        return stream;
    }
Сама программа
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cmath>
using namespace std;
#include "timeClass"
 
 
int main()
{
    timeClass a(11, 32), b(0, 45);
    cout << a-b;
}
Пожалуйста, объясните где я ошибся.
Компилятор говорит "10:7: error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'timeClass')".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2014, 10:01     Не получается перегрузить <<
Посмотрите здесь:

Перегрузить C++
C++ перегрузить функции
C++ Не получается перегрузить оператор сравнения
C++ Не получается перегрузить оператор ++ при работе с массивами
перегрузить оператор ++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
02.07.2014, 10:06     Не получается перегрузить << #2
Примерно так:
C++
1
2
3
4
5
6
timeClass operator-(const timeClass& tc)
    {
        timeClass res();
        res.min = abs(min-tc.min)
        return res;
    }
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
02.07.2014, 10:10  [ТС]     Не получается перегрузить << #3
А можно обойтись без создания временного объекта?
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
02.07.2014, 10:28     Не получается перегрузить << #4
Нельзя. Что тогда возвращать?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2014, 11:23     Не получается перегрузить << #5
Цитата Сообщение от RareScrap Посмотреть сообщение
А можно обойтись без создания временного объекта?
Вдумайтесь в смысл операции вычитания. Есть два объекта (неявный *this и явный аргумент), которые не изменяются, поэтому возвращать надо другой объект. Можно, конечно, извратиться и возвращать ссылку на некий дополнительный объект класса (специально созданный для представления временного результата), но вряд ли это приведет к чему-то хорошему.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
02.07.2014, 12:09     Не получается перегрузить << #6
Кстати о бабочках , все ответы не связаны с изначальным вопросом
(почему no match for 'operator<<').
У меня в VS 2008 предложенный ТС вариант компилируется и правильно исполняется без ошибок и предупреждений.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2014, 12:15     Не получается перегрузить <<
Еще ссылки по теме:

Перегрузить C++
C++ Класс matrix. Не получается перегрузить оператор =
Не получается перегрузить операторы больше, меньше + шаблоны C++

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
02.07.2014, 12:15     Не получается перегрузить << #7
мб потому что нету std:: и не указано using namespace std;
Yandex
Объявления
02.07.2014, 12:15     Не получается перегрузить <<
Ответ Создать тему
Опции темы

Текущее время: 23:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru