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

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

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

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

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

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

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

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

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

Перегрузка операторов - C++
Как написать код перегрузки операторов (+= и --) чтобы выполнялось действие v1+=v2--; v1 и v2 - массив чисел

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
06.06.2012, 12:06     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока #4
Нашел тему, как раз для Вас Там описывается перегрузка шаблонных функций-операторов. Тык. И передавайте разыменованный указатель, как я и писал выше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 12:09     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока
Еще ссылки по теме:

Перегрузка операторов - C++
вот есть такое задание Для заданного по варианту класса выполнить следующие действия: 1) описать все типы конструкторов и деструктор...

Перегрузка операторов - C++
Вот задание b) Создать класс Set – множество целых чисел, используя динамическую память. Определить операторы работы с множествами: &quot;+&quot; –...

Перегрузка операторов - C++
Доброго времени суток. Начал изучать основы ООП, дошел до перегрузки операторов. В программе возникает ошибка при проверке любого...

Перегрузка операторов - C++
Помогите проверить и сделать надо 1) Базовый класс Строка Описать базовый класс СТРОКА. Обязательные члены класса: * указатель...

Перегрузка операторов - C++
Привет, не подскажите, почему у меня тут не работает правильно += оператор. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Перегрузка операторов(=,+) - C++
Надо перегрузить операцию &quot;+&quot; как объединения множеств. Вроде все должно работать, но в строке &quot;c=a+b&quot;(строка 22) в переменной &quot;с&quot;...


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

Или воспользуйтесь поиском по форуму:
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     Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока
Ответ Создать тему
Опции темы

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