在struct中使用枚举值

问题描述 投票:1回答:3

我有以下课程:

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;
        };

    ...

};

我只是不确定如何在myEnum::a中使用struct的值。我尝试过多种方法来引用这个值无济于事。我怎么做到这一点?

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

谢谢,亚当

c++ mbed
3个回答
2
投票

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

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

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


附: a的值为0.零宽度位域可能未命名。在你要做的事情和你想要做的事情之间存在某种脱节。


0
投票

myEnum::a被定义为0。在这种情况下不允许使用Zero width bit fields

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


0
投票

这里有很多事情,所以我会尝试一次解决这些问题。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.