在结构中使用枚举的值

Using value of enum within struct

本文关键字:枚举 结构      更新时间:2023-10-16

我有以下类:

class MyClass 
{
public:
enum myEnum
{
a = 0b0,
b = 0b1,
};
union myUnion
{
uint32_t all;
struct myStruct
{
uint32_t start     : 0b1;
uint32_t enumValue : myEnum::a;
} bits;
};
...
};

我只是不确定如何在struct中使用myEnum::a的值.我已经尝试了许多引用值的方法,但无济于事。我将如何实现这一目标?

这是错误:Error: Name followed by "::" must be a class or namespace name in "MAX1300BEUG/MAX1300.h", Line: 50, Col: 37

谢谢 亚当

枚举没有作用域。因此,将范围解析运算符::应用于myEnum是错误的。

枚举值在封闭命名空间中声明,因此在与myEnum相同的范围内myStruct中,您可以使用非限定查找直接引用其值:ab

MyClass之外,可以用MyClass::a来解决。


附言a的值为 0。零宽度位域不能命名。在你想做的事情和你试图通过做来实现的事情之间存在着某种脱节。

myEnum::a定义为0。在此上下文中不允许使用零宽度位字段。

首先,修复您的错别字(其中有几个,您可以在问题的评论部分看到(。其次,不要尝试在此上下文中创建零宽度位字段。

这里有很多事情要做,所以我将尝试一次解决这些项目。

枚举值范围解析 - 在C++中,枚举的值在与枚举相同的范围内声明(与 C# 不同,其中枚举是其值的命名空间(。枚举值的完全限定范围是::MyClass::a::MyClass::b。完全限定作用域中与引用代码的作用域共享的所有前缀组件都可以省略,只要省略不会导致所需值被另一个同名值隐藏即可。因此,在上面的示例中,您可以将值称为ab

另一个问题是MyClass::myStruct::enumValue被声明为零长度位字段MyClass::a因为它的数值为 0。