在结构中使用枚举的值
Using value of enum within struct
我有以下类:
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
中,您可以使用非限定查找直接引用其值:a
、b
。
在MyClass
之外,可以用MyClass::a
来解决。
附言a
的值为 0。零宽度位域不能命名。在你想做的事情和你试图通过做来实现的事情之间存在着某种脱节。
myEnum::a
定义为0
。在此上下文中不允许使用零宽度位字段。
首先,修复您的错别字(其中有几个,您可以在问题的评论部分看到(。其次,不要尝试在此上下文中创建零宽度位字段。
这里有很多事情要做,所以我将尝试一次解决这些项目。
枚举值范围解析 - 在C++中,枚举的值在与枚举相同的范围内声明(与 C# 不同,其中枚举是其值的命名空间(。枚举值的完全限定范围是::MyClass::a
和::MyClass::b
。完全限定作用域中与引用代码的作用域共享的所有前缀组件都可以省略,只要省略不会导致所需值被另一个同名值隐藏即可。因此,在上面的示例中,您可以将值称为a
或b
。
另一个问题是MyClass::myStruct::enumValue
被声明为零长度位字段MyClass::a
因为它的数值为 0。
- 访问在 C++ 结构中声明的枚举变量
- 带有枚举方向/类型的气泡排序结构数组
- 从 cin 获取 c++ 中结构中多个枚举的输入
- 在结构中使用枚举的值
- 创建结构作为枚举类成员
- 在 C++ 中使用枚举而不是结构进行标记调度
- 为什么要在结构中放置枚举,然后使用 typedef 名称?
- std::映射键作为模板化结构与枚举成员
- 与常规枚举相比,c++ 枚举结构的大小更大吗?
- 枚举范围无法通过 C++ 中的类中的结构访问
- 如何编写一个错误结构,该结构可以包含不同的强键枚举作为错误代码
- 用枚举场和STL容器解析结构,并使用增强精神/融合轻松
- 在容器内过度对齐的结构和枚举之间的C 差异
- 当枚举器列表项的标识符已是结构的成员时,如何使用枚举器列表项
- 从匿名结构访问枚举条目
- 模板结构结合枚举
- 模板结构的多个声明,用于获取枚举,描述模板类型
- 如何定义别名以通过结构访问枚举类成员
- 在c++中创建字符串的枚举/结构体
- 无法访问常量静态标准::映射枚举结构