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

Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока - C++

Восстановить пароль Регистрация
 
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
05.06.2012, 21:02     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока #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
...
template <class T> ostream &operator<<(ostream &s, tree<T> &obj)
{
    if (obj.tr!=NULL) 
    {
        s << obj.get_n();
        obj.tr->save_stream(s);
    }
    return s;
}
 
template <class T> istream &operator>>(istream &s, tree<T> &obj)
{
    unsigned int n;
    s >> n;
    T tmp;
    for (int i=0; i<n; i++)
    {
        s >> tmp;
        
    }
}
...
main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include "tree.h"
#include "tree_element.h"
 
void main()
{
    setlocale(LC_CTYPE, "rus");
    tree<char> *b=new tree<char>(5);
    b->add_elem('a');
    b->add_elem('s');
    b->add_elem('d');
    b->add_elem('f');
    b->add_elem('g');
    
    int n, min, max;    
 
    cout << "Загрузка из последовательного потока: ";
    cin >> b;
    
    delete b;
    getch();
}
При компиляции выводит ошибку: error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" (или приемлемое преобразование отсутствует).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2012, 21:02     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока
Посмотрите здесь:

Перегрузка операторов в С++ C++
C++ Перегрузка операторов
Перегрузка операторов С++ C++
C++ перегрузка операторов
Перегрузка операторов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.06.2012, 21:23     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока #2
Не пробовали делать эти функции не шаблонными?

Добавлено через 1 минуту
И еще - в функции у Вас вторым параметром идет ссылка на объект, а Вы передаете указатель. Нужно передавать объект, то есть вот так попробуйте std::cin >> *b;
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
06.06.2012, 07:51  [ТС]     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока #3
Цитата Сообщение от Toshkarik Посмотреть сообщение
Не пробовали делать эти функции не шаблонными?

Добавлено через 1 минуту
И еще - в функции у Вас вторым параметром идет ссылка на объект, а Вы передаете указатель. Нужно передавать объект, то есть вот так попробуйте std::cin >> *b;
По заданию они должны быть шаблонными. Попробовал Ваш вариант, теперь выдаёт ошибку error C2593: неоднозначный "operator >>"
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
06.06.2012, 12:06     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока #4
Нашел тему, как раз для Вас Там описывается перегрузка шаблонных функций-операторов. Тык. И передавайте разыменованный указатель, как я и писал выше.
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
12.06.2012, 12:09  [ТС]     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока #5
Спасибо, с этим разобрался. Возникла другая проблема - не могу вывести максимальное и минимальное значения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T> int tree<T>::get_max(T &obj)
{
    if (tr==NULL) return 0;
    tree_element<T> *p;
    for (p=tr; p->r!=NULL; p=p->r);
    obj=p->elem;
    return 1;
}
 
template <class T> int tree<T>::get_min(T &obj)
{
    if (tr==NULL) return 0;
    tree_element<T> *p;
    for (p=tr; p->l!=NULL; p=p->l);
    obj=p->elem;
    return 1;
}
Что нужно в main'e прописать для их вывода?
Yandex
Объявления
12.06.2012, 12:09     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока
Ответ Создать тему
Опции темы

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