C++ 向前声明类范围的枚举

C++ Forward declaring class scoped enumeration

本文关键字:范围 枚举 声明 C++      更新时间:2023-10-16

我想知道是否可以转发声明在另一个类范围内定义的枚举。例如,请考虑以下事项:

//A.h
class A
{
public:
    enum class type: unsigned long { /*some stuff*/ }
};

现在,在另一个标头中,我想转发声明"type"枚举(假设下面的类 B 有一个对 A::type 执行某些操作的函数)

//B.h
enum A::type; //use of undefined type 'A'
class B
{
public:
    UseTypeEnum(A::Type&);
};

这也不起作用:

//B.h
class A;
enum A::type; //still use of undefined type
class B...

如果在 A.h 中在全局范围内声明枚举,则没有问题。

有什么办法可以做到这一点吗?

不能在类定义之外声明嵌套类型。

如果需要在类

外部使用它们,则必须包含类定义,或将它们移动到命名空间中。