(由原始帖子编辑以更改“BaseMessage”为“const BaseMessage&”)
大家好, 我对C++非常陌生,所以我希望你们能帮助我“看到我的错误”。
我有一个消息层次结构,并且我试图使用抽象基类来强制实施接口。 特别是,我想要强制每个派生的消息提供重载的 << 运算符。
当我尝试像这样做时:
class BaseMessage
{
public:
// some non-pure virtual function declarations
// some pure virtual function declarations
virtual ostream& operator<<(ostream& stream, const BaseMessage& objectArg) = 0;
}
编译器报错:
"error: cannot declare parameter ‘objectArg’ to be of abstract type ‘BaseMessage’
我认为这里还涉及到“friend”问题,但是当我尝试将它声明为:
virtual friend ostream& operator<<(ostream& stream, const BaseMessage objectArg) = 0;
编译器会添加一个额外的错误:
"error: virtual functions cannot be friends"
有没有一种方法可以确保我所有派生(消息)类都提供了"<<"输出流运算符?
非常感谢,
史蒂夫