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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.