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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
#1

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

02.07.2014, 10:01. Просмотров 227. Ответов 6
Метки нет (Все метки)

Добрый день. Никак не получается вывести разность 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++
class vremya { private: int h,m,s; public: void operator ++(int) { s++; if (s==60) ...

Класс matrix. Не получается перегрузить оператор = - C++
Всем привет! Пишу класс matrix. Не получается перегрузить оператор = Конструктор копирования тоже не получается. Оба выводят одну и ту...

Не получается перегрузить операторы больше, меньше + шаблоны - C++
Ругается на метод бинарного дерева template &lt;class T&gt; class Tree { private: Elem&lt;T&gt; *root; //указатель на корневой элемент ...

Не получается перегрузить оператор ++ при работе с массивами - C++
Текст: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Не получается перегрузить оператор вывода для дружественной функции - C++
Не могу понять почему пытаясь перегрузить оператор вывода использую дружественную функцию, я не могу передать объект по значению, это...

Перегрузить - C++
Уважаемы форумчание нужна помощь, задание связанно с перегузкой операций. Задание: разработать класс оболочку int и перегрузить операции...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5113 / 4433 / 1474
Регистрация: 14.04.2014
Сообщений: 17,571
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
5113 / 4433 / 1474
Регистрация: 14.04.2014
Сообщений: 17,571
02.07.2014, 10:28     Не получается перегрузить << #4
Нельзя. Что тогда возвращать?
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.07.2014, 11:23     Не получается перегрузить << #5
Цитата Сообщение от RareScrap Посмотреть сообщение
А можно обойтись без создания временного объекта?
Вдумайтесь в смысл операции вычитания. Есть два объекта (неявный *this и явный аргумент), которые не изменяются, поэтому возвращать надо другой объект. Можно, конечно, извратиться и возвращать ссылку на некий дополнительный объект класса (специально созданный для представления временного результата), но вряд ли это приведет к чему-то хорошему.
zss
Модератор
Эксперт С++
6280 / 5883 / 1904
Регистрация: 18.12.2011
Сообщений: 15,085
Завершенные тесты: 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++
#include &lt;conio&gt; #include &lt;iostream&gt; #include &lt;stdio&gt; using namespace std; class summa { private: double first; int second; ...

Перегрузить операции +, +=, ==, [], () - C++
Для класса String перегрузить операции + + = == () таким образом, чтобы обеспечивалось выполнение следующих операций: ...

Перегрузить оператор - - C++
Есть 2 масива если в них есть 2 одинаковых числа то з первого масива что бы изменялось на ноль например то число которое есть во втором...

Перегрузить operator* - C++
Подскажите, пожалуйста, как использовать operator* в void main в данной программе по аналогии с operator-&gt; Не разобрался полностью в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru