LINUX.ORG.RU

Вопрос по С++


0

0
Хочу: cout<<"Here comes listing of M: "<<M; , где M - какой-то класс MyClass.

Для этого делаю:

class MyClass
{
...;
ostream& operator<<(ostream&, MyClass&);
}

И получаю:

..\modulebase.h:35: error: ISO C++ forbids declaration of `ostream' with no type

Как сделать правильно?
★★★★★
std::ostream? #include <iostream>?
Сделай внешней функцию.
Обячно пишут:
friend std::ostream& operator<<(ostream&, MyClass&);
Ну и реализацию можно сразу в класе (если написать friend)
stpg
()
Ответ на: комментарий от alex_custov
тьфу, точно же. std::

спасибо.

</thread>
jcd ★★★★★
() автор топика
Ответ на: комментарий от stpg
>Ну и реализацию можно сразу в класе (если написать friend)

Да, забыл тут friend дописать.
jcd ★★★★★
() автор топика
Ответ на: комментарий от stpg
> Обячно пишут:

> friend std::ostream& operator<<(ostream&, MyClass&);

Ну и в догонку: если не нравятся друзья (ну всякое бывает), то можно сделать метод void printTo(std::ostream&), а снаружи operator<<, который будет дёргать этот метод.

const86 ★★★★★
()
friend не нужен и вообще признак плохого дизайна класса. Не понимаю, зачем его во всех примерах пишут. "Печать" класса - внешняя задача, не относящаяся непосредственно к классу, и должна делаться внешим функционалом, без лазанья во внутренности класса.
Legioner ★★★★★
()
Вдогонку: используйте const MyClass&
Dendy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.