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:问题是:为什么我们需要解决一个问题,以便为正向声明的enum属性分配默认值?

最佳答案

从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。否则,强制转换是为整数提供枚举的唯一方法。

关于c++ - 转发声明的枚举,.h中的默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51653014/

10-09 14:32