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

Перегрузка ввода - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с файлами в С++ http://www.cyberforum.ru/cpp-beginners/thread1081876.html
создать в блокноте текстовый файл ( не менее 3х строк) ( чтобы были кирилица , латинские буквы цифры и знаки препенания) 1 с привлечением библиотеки fstream вывести содержимое файла на экран 2 заменить киррилические буквы на восклицательные знаки и вывести содержимое файла на экран ( в файле заменить)
C++ Можно ли приложение написанное на c++ запустить в flash player? Можно ли приложение написанное на c++ запустить в flash player? http://www.cyberforum.ru/cpp-beginners/thread1081865.html
C++ Метки и вывод наименьшего угла треугольника
Доброго времени суток! Есть задание: Треугольник задается координатами своих вершин. Среди некоторого количества треугольников указать те, которые являются остроугольными. Найти остроугольный треугольник наиболее близкий к прямоугольному треугольнику. Проверку на наличие у треугольника острых углов организовать во вспомогательном алгоритме. Вот что мне удалось "набрать"...Прошу строго не...
C++ Считывание данных из файла
Всем здравствуйте... вообщем создан пользовательский класс пассажир class Passenger: public Human { private: string NR;//Название рейса int TN;//Номер билета float WB;//Вес багажа
C++ Взаимодействие программы с другими http://www.cyberforum.ru/cpp-beginners/thread1081839.html
Здравствуйте, мне нужно написать программу, которая в поле ввода любого окна (например в skype или браузере) заменяет вводимые знаки на необходимые мне. Посоветуйте, какие темы мне нужно изучить для реализации данной задумки. Я, можно сказать, начинающий.
C++ Получить новый массив, содержащий те элементы, которые меньше среднего арифметического, удалив их из исходного Дан массив a1,...,a50. Получить новый массив, содержащий те элементы, которые меньше среднего арифметического, удалив их из исходного. подробнее

Показать сообщение отдельно
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 29
26.01.2014, 14:54     Перегрузка ввода
Вроде делал всё правильно, перегрузка вывода работает, делал аналогично и ввода, компилируется нормально но выводит вот это:
Код
1>d:\peregruz\peregruz\time.cpp(47): warning C4717: operator>>: рекурсия на всех путях выполнения, функция вызовет переполнение стека
вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//time.h
 
#pragma once
#include <iostream>
using namespace std;
class time
{
private:
    int seconds;
    int minutes;
    int hours;
public:
    time(void);
    time(int);
    time(int,int,int);
    time operator+(const time&) const;
    friend ostream &operator << (ostream& os,const time& t1);
    
    friend istream &operator >> (istream& is, const time& t4);
    
    
    ~time(void);
};
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
//time.cpp
 
#include "StdAfx.h"
#include "time.h"
 
 
time::time(void)
{
    hours=minutes=seconds=0;
}
time::time(int sec)
{
hours   = sec / (60*60);
minutes = sec % (60*60)/60;
seconds = sec % (60*60)%60;
}
time::time(int h,int m ,int s)
{
    if(h > 24 || m > 60 || s > 60)
    {
        time::time();
        return;
    }
 
        hours=h;
        minutes=m;
        seconds=s;
}
time time::operator+(const time&t)const
{
time result;
result.seconds =(seconds+t.seconds)%60;
result.minutes =(minutes+t.minutes+(seconds+t.seconds/60)%60);
result.hours   =(hours+t.hours+(minutes+t.minutes)/60);
return result;
 
}
 
ostream& operator<<(ostream& os,const time& t1)
{
    os<< t1.hours<<":"<<t1.minutes<<":"<<t1.seconds<<" ";
    return os;
}
 
istream &operator >> (istream & is, const time& t4) // перегрузка функции ввода
{
    is >> t4.hours >> t4.minutes>> t4.seconds;
    return is;
}
 
time::~time(void)
{}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//peregruz.cpp
 
#include "stdafx.h"
#include <iostream>
#include "time.h"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"Rus");
    time t1(4500);
    time t2(2,35,21);
    time t3;
    t3=t1+t2;
    time t;
    //cout<<"Полученное время: "<<t3<<endl;
    cin>>t;
    cout<<t;
    
    return 0;
}
Или как правильно сделать перегрузку ввода даты.
Спасибо.

Добавлено через 13 минут
Изменил перегрузку ввода на это:
C++
1
2
3
4
5
istream &operator >> (istream & is, const time& t4) // перегрузка функции ввода
{
    is >> t4.hours >> ":" >> t4.minutes>> ":" >> t4.seconds;
    return is;
}
В итоге ошибка:
Код
>d:\peregruz\peregruz\time.cpp(45): error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" (или приемлемое преобразование отсутствует)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru