在结构中使用枚举的值

Using value of enum within struct

我有以下 class:

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::a 定义为 0Zero width bit fields 在此上下文中是不允许的。

首先,修正你的拼写错误(有几个,你可以在问题的评论部分看到)。其次,不要尝试在此上下文中创建零宽度位域。

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

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

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


P.S。 a 的值为 0。不能命名零宽度位域。您尝试做的事情与您尝试通过这样做实现的目标之间存在某种脱节。

这里发生了很多事情,所以我将尝试一次解决这些问题。

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

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