(отредактировано с исходного сообщения, чтобы изменить "BaseMessage" на "const BaseMessage &" )
Привет всем, Я очень новичок в С++, поэтому, надеюсь, вы, люди, можете мне помочь "увидеть ошибки моих путей".
У меня есть иерархия сообщений, и я пытаюсь использовать абстрактный базовый класс для обеспечения соблюдения интерфейс. В частности, я хочу заставить каждое полученное сообщение обеспечить перегрузку & Л; < Оператор.
Когда я пытаюсь сделать это с чем-то вроде этого:
class BaseMessage
{
public:
// some non-pure virtual function declarations
// some pure virtual function declarations
virtual ostream& operator<<(ostream& stream, const BaseMessage& objectArg) = 0;
}
компилятор жалуется, что
"error: не может объявлять параметр objectArg абстрактного типа BaseMessage
Я считаю, что здесь есть и "друг", но когда я пытался объявить его как:
virtual friend ostream& operator<<(ostream& stream, const BaseMessage objectArg) = 0;
компилятор добавил ошибку с добавлением
": виртуальные функции не могут быть друзьями"
Есть ли способ гарантировать, что все мои производные (сообщения) классы предоставляют "< < операционный оператор?
Большое спасибо,
Стив