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

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

Войти
Регистрация
Восстановить пароль
 
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
#1

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

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

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

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

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

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

Перегрузка операторов С++ - C++
Всем привет возникла проблема при попытк перегрузить оператор+ в языке с++ мне надо чтобы была возможность сложить double число с...

Перегрузка операторов >>, << - C++
Помогите перегрузить операторы ввода и вывода в классе Time. (Я совсем-совсем новичек...)Заранее всем спасибо.class Time { friend...

4
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 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
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 12:09
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Вообщем в чём дело смысл перегрузки операторов ясен,зачем применять тоже ясно,как организуется понятно,перегрузка унарных операторов...

Перегрузка операторов - C++
Здравствуйте уважаемые форумчане :) У меня имеется задание написать самодельный класс строки. Если с потоковым выводом я разобрался, то с...

Перегрузка операторов - C++
Здравствуйте, помогите найти в коде перегрузку оператора. ConsoleApplication1 #include &quot;masiv.h&quot; #include &lt;iostream&gt; using...

Перегрузка операторов - C++
Здравствуйте! Сделал класс квадратной матрицы. Содержит конструктор по умолчанию, конструктор с параметрами, конструктор копирования,...


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

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

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