在结构中使用枚举的值
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
定义为 0
。 Zero width bit fields 在此上下文中是不允许的。
首先,修正你的拼写错误(有几个,你可以在问题的评论部分看到)。其次,不要尝试在此上下文中创建零宽度位域。
枚举没有作用域。因此,将范围解析运算符 ::
应用于 myEnum
是错误的。
枚举值在封闭的命名空间中声明,因此在与 myEnum
相同范围内的 myStruct
中,您可以使用非限定查找直接引用其值:a
, b
.
在MyClass
之外,可以用MyClass::a
解决。
P.S。 a
的值为 0。不能命名零宽度位域。您尝试做的事情与您尝试通过这样做实现的目标之间存在某种脱节。
这里发生了很多事情,所以我将尝试一次解决这些问题。
枚举值范围解析 - 在 C++ 中,枚举的值在与枚举相同的范围内声明(与 C# 不同,其中枚举是其值的命名空间)。枚举值的完全限定范围是 ::MyClass::a
和 ::MyClass::b
。完全限定范围内与引用代码范围共享的所有前缀组件都可以省略,只要省略不会导致所需值被另一个同名值隐藏即可。因此,在上面的示例中,您可以将这些值称为 a
或 b
.
另一个问题是 MyClass::myStruct::enumValue
被声明为零长度位域,因为 MyClass::a
的数值为 0。
我有以下 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
定义为 0
。 Zero width bit fields 在此上下文中是不允许的。
首先,修正你的拼写错误(有几个,你可以在问题的评论部分看到)。其次,不要尝试在此上下文中创建零宽度位域。
枚举没有作用域。因此,将范围解析运算符 ::
应用于 myEnum
是错误的。
枚举值在封闭的命名空间中声明,因此在与 myEnum
相同范围内的 myStruct
中,您可以使用非限定查找直接引用其值:a
, b
.
在MyClass
之外,可以用MyClass::a
解决。
P.S。 a
的值为 0。不能命名零宽度位域。您尝试做的事情与您尝试通过这样做实现的目标之间存在某种脱节。
这里发生了很多事情,所以我将尝试一次解决这些问题。
枚举值范围解析 - 在 C++ 中,枚举的值在与枚举相同的范围内声明(与 C# 不同,其中枚举是其值的命名空间)。枚举值的完全限定范围是 ::MyClass::a
和 ::MyClass::b
。完全限定范围内与引用代码范围共享的所有前缀组件都可以省略,只要省略不会导致所需值被另一个同名值隐藏即可。因此,在上面的示例中,您可以将这些值称为 a
或 b
.
另一个问题是 MyClass::myStruct::enumValue
被声明为零长度位域,因为 MyClass::a
的数值为 0。