在struct

时间:2018-09-17 15:16:35

标签: c++ mbed

我有以下课程:

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

谢谢, 亚当

3 个答案:

答案 0 :(得分:2)

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

枚举值是在封闭的命名空间中声明的,因此在myStruct(与myEnum处于同一范围内)中,您可以使用不限定条件的查找直接引用其值:ab

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


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

答案 1 :(得分:0)

src=post._.image.src({dpr:'auto'}) // pug syntax 被定义为myEnum::aZero width bit fields在这种情况下是不允许的。

首先,修正您的错别字(有很多错别字,如您在问题的评论部分中所见)。其次,请勿尝试在这种情况下创建宽度为零的位字段。

答案 2 :(得分:0)

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

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

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