转发声明的枚举,.h

时间:2018-08-02 11:54:44

标签: c++ c++11 enums

Types.h:

enum MyEnum : int8
{
    invalid = -1,
    valid = 0,
}

class TestClass 
{ ... default stuff ...}

MyOtherHeader.h:

enum MyEnum : int8;
class TestClass;

class MyClass
{
    MyEnum Val = -1;
    TestClass* MyObj= nullptr;
}

为什么我们可以将null分配给转发声明的类指针,却不能将enum的已定义基础类型的值分配给转发的声明的类指针?

编译器不能正确“推断”吗?

TLDR:问题是:为什么我们需要解决一些问题,才能为正向声明的枚举属性分配默认值?

1 个答案:

答案 0 :(得分:1)

没有从int到枚举的隐式转换。因此,您无法copy-initialize(使用=)一个int枚举。所以即使这样

enum MyEnum : int8
{
    invalid = -1,
    valid = 0,
};

MyEnum e = -1;

将产生相同的错误。您可以添加演员表,也可以切换到direct-initialization(此处也是演员表的一种形式):

MyEnum e{-1};

尽管可悲的是仅从C ++ 17开始,上述方法直接初始化了变量。在我们特定的情况下,如果可以使用具有C ++ 17功能的编译器,则可以使用它为您的成员提供default member initializer。否则,强制转换是为整数提供枚举的唯一方法。