Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
1

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

05.06.2012, 21:02. Просмотров 940. Ответов 4
Метки нет (Все метки)

Добрый день. Для своего класса нужно загрузить элементы в структуру данных из последовательного потока. Написал перегрузку операторов:
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" (или приемлемое преобразование отсутствует).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2012, 21:02
Ответы с готовыми решениями:

Перегрузка операторов ввода и вывода из потока в шаблонном классе
Доброго времени суток. Пишу свой вектор. В нём надо перегрузить вышеназванные операторы. Vector.h...

ООП перегрузка операторов сумма элементов
есть задача, нужно изменить перегрузку операции &quot;+&quot;. что бы возвращало значение суммы двух входящих...

ООП перегрузка операторов сумма элементов
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; const int vector_size = 8; //...

Ошибка последовательного выполнения операторов
Доброго времени суток! Собственно, работаю с типизированным файлом. Произвожу поиск заданной...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

4
Toshkarik
1168 / 881 / 94
Регистрация: 03.08.2011
Сообщений: 2,450
Завершенные тесты: 1
05.06.2012, 21:23 2
Не пробовали делать эти функции не шаблонными?

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

Добавлено через 1 минуту
И еще - в функции у Вас вторым параметром идет ссылка на объект, а Вы передаете указатель. Нужно передавать объект, то есть вот так попробуйте std::cin >> *b;
По заданию они должны быть шаблонными. Попробовал Ваш вариант, теперь выдаёт ошибку error C2593: неоднозначный "operator >>"
0
Toshkarik
1168 / 881 / 94
Регистрация: 03.08.2011
Сообщений: 2,450
Завершенные тесты: 1
06.06.2012, 12:06 4
Нашел тему, как раз для Вас Там описывается перегрузка шаблонных функций-операторов. Тык. И передавайте разыменованный указатель, как я и писал выше.
0
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 прописать для их вывода?
0
12.06.2012, 12:09
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 12:09

Реализуйте запуск потока для последовательного счета, начиная с заданного числа
Доброго времени суток Задание такое: Реализуйте запуск потока для последовательного счета начиная...

Перегрузка операторов
Здравствуйте, скажите возможно ли перегрузить операторы +=, -=, *=, и вывод на консоль в си#?

Перегрузка операторов С++
Всем привет!:) Помогите пожалуйста разобраться в коде. Я сооооовсем начинающий и сейчас учу с++ по...


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

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

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