C ++访问联合内部结构的成员

时间:2017-06-05 14:46:02

标签: c++ struct unions atmel asf

我正在尝试为Atmel微控制器编写C ++程序。

我需要使用已经在ASF库中编写的一些函数,我是通过将一些代码复制到C ++函数中来实现的。

我在编译时收到此错误:

  

'union Pm'没有名为'PM_CPUMASK'的成员

Pm类型联合看起来像这样:

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 ++编译器中激活这种成员访问方式?

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

1 个答案:

答案 0 :(得分:3)

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

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

什么是匿名结构,即编译器扩展,并且对于C ++编译器没有这样的默认扩展,请参阅here

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

很抱歉,如果我的猜测错了。但关键是你必须在那里使用一个额外的名字。