使用虚拟类的运算符<<

Operator << with virtual classes

本文关键字:运算符 虚拟      更新时间:2023-10-16

我有一个问题。我有一个类逻辑,有一个字符串和一个对象。我希望当我在逻辑类中写入cout<<a时,这个运算符会更改我的字符串。所以我这样做了:

逻辑.h

class logic
{
private:
int str;
A a;
public:
...
};

逻辑.cpp

...
...
cout<<*a;
...
ostream& operator<<(ostream& os, const A& A)
{
    int=a.num;
    return os;
}

Z.H

class Z
{
public:
virtual Z* aa();
...
};

A.H

class A: public Z
{
private:
int num;
public:
virtual Z* aa();
...
};

我得到了这些错误:

在"{"标记之前预期的类名 ( on class A:public Z { ) ISO C++禁止声明没有类型的"Z",将"Z"声明为 "虚拟"字段,应在"*"令牌之前使用";"(在每个虚拟令牌上) 函数在 A)

你可以帮我吗?

类定义后需要一个分号:

class A: public Z
{
private:
  int num;
  public:
  virtual Z* aa();
  // ...
}; // <-- SEMICOLON!!1

此外,请确保定义A之前定义Z,方法是在 a.h#include ing z.h