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/