class 中枚举的前向声明?

Forward Declaration of enum in a class ?

我有两个抽象 Class 彼此拥有另一个的指针。我需要在其中一个中使用另一个 Class 的枚举,例如示例。 AFoo 持有 ABar,ABar 需要一个指向 AFoo 的指针来更新一些数据,还需要一个使用 AFoo 枚举的成员函数。

我记得曾经遇到过这个问题,但没有遇到枚举问题,我最终做了内联声明。

我可以做一个嵌套 class,但有没有其他方法可以避免这种情况?

AFoo.hpp :

#include ...

class AFoo;
enum AFoo::poo; --> not possible

#include "ABar.hpp"

class AFoo {
public:
  ...
 virtual void func() = O;
 enum poo {
  H,
  I,
  ...
 }
protected:
 ABar *bar_;
};

ABar.hpp

#include ...

class Abar;

#include "AFoo.hpp"

class ABar {
public:
 ...
 virtual AFoo::poo doing_some_stuff() = 0; --> Here is my problem (if i replace the return type with basic type i have no compilation problem)
protected:
 AFoo *foo_;
};

在AFoo.hpp中,移除

enum AFoo::poo; --> not possible

并替换

#include "ABar.hpp"

class ABar;

此外,您的 enum 声明缺少一个分号。

在AFoo.hpp中,不包含ABar.hpp,只向前声明class:

class ABar;

此外,在 ABar.hpp 中,包括 AFoo.hpp,不要转发 ABarAFoo