Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> operator <<, прегрузка оператора вывода для своего кл 
:(
    Опции темы
peetonn
Дата 30.11.2006, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2006

Репутация: нет
Всего: нет



как надо перегружать операторы вывода >>?
так, как сделал я:
Код

    ostream &operator<<(set<T>  &A){
   /*    здесь код                                           */       
        };

он не хочет, говорит:
[C++ Error] myprog.cpp(62): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'set<int>'
может, кто-нибудь знает, в чем дело?
класс set<T> - шаблонный.
PM MAIL   Вверх
Daevaorn
Дата 30.11.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Код

template< typename T >
ostream& operator<<( ostream& outp, set<T>  &A)
{
   /*    здесь код                                           */       
   return outp;
};



Это сообщение отредактировал(а) Daevaorn - 30.11.2006, 22:42
PM MAIL WWW   Вверх
peetonn
Дата 30.11.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2006

Репутация: нет
Всего: нет



Код

[quote]
ostream& operator<<( ostream& outp, set<T>  &A)
[/quote]

я так уже ставил - [C++ Error] SetUnit.h(151): E2080 'set<T>::operator << <T>(ostream &,set<T> &)' must be declared with one parameter
кстати, 
Цитата

template< typename T >

не надо - реализацию оператора  я сделал при объявлении класса

Добавлено @ 22:57 
одного не пойму - почему оператор (<<) должен быть именно с одним параметром?
PM MAIL   Вверх
Daevaorn
Дата 30.11.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



peetonn, параметра должно быть именно два. у тебя просто синтаксические ошибки  в коде
Цитата(peetonn @  30.11.2006,  23:55 Найти цитируемый пост)
operator << <T>(

зачем <T> ?
PM MAIL WWW   Вверх
peetonn
Дата 1.12.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2006

Репутация: нет
Всего: нет



Цитата

зачем <T> ?

извиняюсь за устаревшее содержимое моего буфера: 
[C++ Error] SetUnit.h(151): E2080 'set<T>::operator <<(ostream &,set<T> &)' must be declared with one parameter
но от этого не легче smile 
PM MAIL   Вверх
Daevaorn
Дата 1.12.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



peetonn, 
вынеси определение оператора из тела класса.

Добавлено @ 00:14 
Если оставить внутри, то надо убрать второй параметр, но тогда получится "классный" эффект:
Код

set << std::cout;

PM MAIL WWW   Вверх
peetonn
Дата 1.12.2006, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2006

Репутация: нет
Всего: нет



Цитата

вынеси определение оператора из тела класса.

странно, но другие-то операторы работают!
вот класс:
Код

template <class T>
struct set: public List<T>{
    set<T>& operator=(set<T> &B){...};
           
        set<T> operator+(set<T> &B){...};
        set<T> operator-(set<T> &B){...};
        set<T> operator*(set<T> &B){...};

        bool operator==(set<T> &B){...};
        bool operator!=(set<T> &B){...};
        bool operator>(T a){...};
        bool operator<=(set<T> &B){...};
        bool operator>=(set<T> &B){...};

        bool IsEmpty(){...};
        void AddEl(T a){...};
        void DelEl(T a){...};

void PrintSet(){...}; // вот, собственно говоря, вместо этой ф-ции и хочу перегрузить опрератор <<

ostream &operator<<( set<T> &A){...};

};



Цитата

параметра должно быть именно два. у тебя просто синтаксические ошибки  в коде

а почему именно 2?  в iostream, например, одного хватает
а если должно быть 2 то почему ругается? где синтаксические ошибки - в коде оператора?
PM MAIL   Вверх
nickless
Дата 1.12.2006, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(peetonn @ 30.11.2006,  23:32)
а почему именно 2? 

Имеется ввиду глобальный operator<<, ему нужно левый и правый операнд.
Если перегрузить его только в твоем классе, то при использовании нужно чтобы слева стоял твой класс.
Код

А << B;
// с одним параметром это то же самое, что и
A.operator<<(B)
// а с двумя (глобальный)
operator<<(A,B)

т.е в случае cout << A, нужно перегружать operator<< в std::cout, чего ты сделать не можешь


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.