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

Перегрузка оператора ввода, ошибка - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
14.05.2011, 18:32     Перегрузка оператора ввода, ошибка #1
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
struct date_of_birth
{
    int year;
    int month;
    int day;
    date_of_birth(int year =0, int month =0, int day =0):year(year), month(month) ,day(day){}
    date_of_birth(const date_of_birth &a):year(a.year), month(a.month) ,day(a.day){}
    friend std::ostream &operator << (std::ostream &out,const date_of_birth &a)
    {
        out <<" year :" <<a.year
            <<" month: " << a.month
            << " day " << a.day;
        return out;
    }
    friend std::istream &operator >> (std::istream &in,const date_of_birth &a)
    {
        std::cout << " \nenter year ";
        std::cin >> a.year;
        std::cout << " \nenter month ";
        std::cin >> a.month;
        std::cout << " \nenter day ";
        std::cin >> a.day;
        return in;
    }
при компиляции ошибок нет но при вызове оператора ввода почему то происходит какойто вечный цикл... непонмаю почему... постоянно выводитса строка enter year а потом вылетает ошибка...
Код
Необработанное исключение в "0x00411829" в "1234.exe": 0xC00000FD: Stack overflow.
как я заметил после етой строки
C++
1
std::cin >> a.year;
вызываетса конструктор по умолчанию
C++
1
date_of_birth(int year =0, int month =0, int day =0):year(year), month(month) ,day(day){}
и потом снова
C++
1
std::cin >> a.year;
.... и так до ошибки... почему вообще этот конструтор тут вызываетса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2011, 18:32     Перегрузка оператора ввода, ошибка
Посмотрите здесь:

Перегрузка оператора ввода ">>" C++
C++ Перегрузка оператора ввода вне класса
Перегрузка оператора ввода и наследование C++
Перегрузка оператора ввода C++
Перегрузка оператора ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
14.05.2011, 18:39     Перегрузка оператора ввода, ошибка #2
C++
1
in >> a.year;
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
14.05.2011, 18:41  [ТС]     Перегрузка оператора ввода, ошибка #3
кто знает а?

Добавлено через 33 секунды
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
C++
1
in >> a.year;
так тоже делал... не работает....
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
14.05.2011, 18:46     Перегрузка оператора ввода, ошибка #4
C++
1
2
3
4
5
friend std::istream &operator >> (std::istream &in, date_of_birth &a)
        {
                in >> a.year >> in >> a.month >> in >> a.day;
                return in;
        }
D главной функции:
C++
1
2
 date_of_birth D;
cout << "Дайте дату: "; cin >> D;
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
14.05.2011, 19:59     Перегрузка оператора ввода, ошибка #5
Не знаю что должна делать ваша программа и где ваш main, но чтобы не было преобразования по умолчанию можно добавить перед конструктором ключевое слово explicit. Также добавлю что перегрузка операторов ввода и вывода осуществляется вне границ класса/структуры.
Yandex
Объявления
14.05.2011, 19:59     Перегрузка оператора ввода, ошибка
Ответ Создать тему
Опции темы

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