C++ 访问 union 内结构的成员

标签 c++ struct unions atmel asf

我正在尝试为 Atmel 微 Controller 编写 C++ 程序。

我需要使用 ASF 库中已编写的一些函数,为此我将一些代码复制到 C++ 函数中。

我在编译时遇到此错误:

'union Pm' has no member named 'PM_CPUMASK'

Pm 类型 union 看起来像这样:

typedef union {
 struct {
    ....  
 } bf;
 struct {
  ....
  RwReg   PM_CPUMASK;
  ....
 } reg;
} Pm;`

在ASF代码中,成员PM_CPUMASK的访问方式如下:

unsigned int mask = *(&PM->PM_CPUMASK + busId);

但是我收到一个错误。我认为这在 C 中是有效的,但在 C++ 中我需要访问命名结构,然后访问实际成员。使用 *(&PM->reg.PM_CPUMASK...) 我没有收到错误,但是有没有办法在 C++ 编译器中激活这种成员访问方式?

顺便说一句,这两个结构体的成员没有命名冲突。 谢谢。

最佳答案

我猜你是复制粘贴代码然后修改的。原来的代码是这样的

typedef union {
 struct {
    ....  
 };
 struct {
  ....
  RwReg   PM_CPUMASK;
  ....
 };
} Pm;

什么是匿名结构体,即编译器扩展,C++编译器没有这样的默认扩展,参见here .

然后您向这些结构添加了名称。这就是为什么您必须使用另一个标识符来访问该成员。

抱歉,如果我的猜测是错误的。但重点是您必须在那里使用额外的名称。

关于C++ 访问 union 内结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44371556/

相关文章:

c++ - 使用 using 声明时,非限定名称查找如何工作?

c - 无法打印链表

struct - 错误 : struct Type is not an expression

c# - 如何将 C++ union 类型转换为 C# 代码?

c - 在嵌入式寄存器结构中用位移位替换位域

c++ - 特殊结构 : grouping of (pointers to function and groupings of pointers to function)

c++ - C++98 中的异构容器查找

c++ - 如何配置 HttpEndRequest 的超时?

swift - 如果传递很多,Swift 中的结构会导致内存问题吗?

c++ - SDL(简单媒体直接层)尝试缩放我的 Sprite (角色)