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