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

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

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

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

02.07.2014, 10:01. Просмотров 244. Ответов 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')".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2014, 10:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается перегрузить << (C++):

Не получается перегрузить << - C++
Здравствуйте!Хочу перегрузить оператор &lt;&lt; ,но не получается взять данные из private.Функция вроде дружественная.Пожалуйста,кто-нибудь...

Не получается перегрузить оператор сравнения - 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++
Не могу понять почему пытаясь перегрузить оператор вывода использую дружественную функцию, я не могу передать объект по значению, это...

6
nmcf
5354 / 4674 / 1565
Регистрация: 14.04.2014
Сообщений: 18,630
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;
    }
0
RareScrap
1 / 1 / 0
Регистрация: 14.10.2013
Сообщений: 85
02.07.2014, 10:10  [ТС] #3
А можно обойтись без создания временного объекта?
0
nmcf
5354 / 4674 / 1565
Регистрация: 14.04.2014
Сообщений: 18,630
02.07.2014, 10:28 #4
Нельзя. Что тогда возвращать?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.07.2014, 11:23 #5
Цитата Сообщение от RareScrap Посмотреть сообщение
А можно обойтись без создания временного объекта?
Вдумайтесь в смысл операции вычитания. Есть два объекта (неявный *this и явный аргумент), которые не изменяются, поэтому возвращать надо другой объект. Можно, конечно, извратиться и возвращать ссылку на некий дополнительный объект класса (специально созданный для представления временного результата), но вряд ли это приведет к чему-то хорошему.
0
zss
Модератор
Эксперт С++
6481 / 6044 / 1983
Регистрация: 18.12.2011
Сообщений: 15,674
Завершенные тесты: 1
02.07.2014, 12:09 #6
Кстати о бабочках , все ответы не связаны с изначальным вопросом
(почему no match for 'operator<<').
У меня в VS 2008 предложенный ТС вариант компилируется и правильно исполняется без ошибок и предупреждений.
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 2,004
02.07.2014, 12:15 #7
мб потому что нету std:: и не указано using namespace std;
0
02.07.2014, 12:15
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++
Уважаемы форумчание нужна помощь, задание связанно с перегузкой операций. Задание: разработать класс оболочку int и перегрузить операции...

Перегрузить операции - C++
Здравствуйте! Есть уже готовая программа , но в ней нужно перегрузить операции + добавление элемента; - удаление элемента; ...

Можно ли перегрузить [][]? - C++
Мне нужна матрица в которой будет определенная область декартовой системы координат из первой четверти. Она может начинаться не в начале...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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