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:问题是:为什么我们需要解决一些问题,才能为正向声明的枚举属性分配默认值?
答案 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。否则,强制转换是为整数提供枚举的唯一方法。