| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > перегрузка ostream& operator << |
| Автор: marcusmae 2.4.2008, 23:22 | ||||
| Всем привет, Множество определённых мною перегрузок оператора <<
не охватывает возможности принятия std::endl / std::beginl в качестве аргумента. Пробовал подсмотреть в стандартные исходники :
с подстановкой wchar_t не катит. Как же всё-таки его правильно записать?.. |
| Автор: bsa 2.4.2008, 23:51 |
| вопрос, а зачем тебе это вообще делать? чем тебя стандартное поведение не устраивает? Ты что, свой ostream пишешь? |
| Автор: marcusmae 2.4.2008, 23:58 | ||||||
bsa, я не претендую на универсальность. Достаточно перехватить стандартный вывод лишь в части пяти типов :
Это вроде бы удалось. Единственная проблема - если справа сразу endl стоит :
Это приводит к ошибке (MVC++ 9.0) :
Как бы это обойти?.. Или я вообще ничего не понимаю? |
| Автор: bsa 3.4.2008, 00:07 | ||||||
| Кстати, стандартные типы лучше передавать по значению, разве что long double, имхо, лучше по ссылке. Ты забыл long double, short int, long int и long long int. std::endl и прочие - это функции, которые объявлены так:
|
| Автор: marcusmae 3.4.2008, 00:24 | ||
круто Манипуляторы - фиг с ними. Пока, думаю, они не понадобятся. Спасибо! Добавлено через 2 минуты и 3 секунды Ок, сделал. |
| Автор: student0511 22.4.2008, 00:47 | ||||
У меня возникла проблема: никак не могу перегрузить операцию << для собственного класса строк Tstring.
Вот описание класса: как видно operator<< является дружественной функцией, но если в теле описания данной функции обратиться к полю аргумента из private, то вылетает ошибка: error C2248: 'str' : cannot access private member declared in class 'Tstring'.
Компилятор: Visual C++ 6 1994 - 1998 Microsoft Corporation - может дело в нём или надо что-то прописать? |
| Автор: bronislav 22.4.2008, 07:37 |
| У меня возникала анологичная ошибка именно в MS VC++ 6. Как решал не помню, вроде бы переносли в public, но это конечно не правильное решение. В более новых компиляторах такой ошибки не возникало. |
| Автор: Fazil6 22.4.2008, 14:43 | ||
странная какая-то ошибка... попробовал в VC++ 6 SP5
все собралось и работает |
| Автор: student0511 22.4.2008, 15:11 |
| Да работает. Когда прототип пишешь функции до описания класса, то работает. Очень даже странно. |