1

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

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

4

1 回答 1

3

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

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

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

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

对不起,如果我的猜测是错误的。但关键是你必须在那里使用一个额外的名字。

于 2017-06-05T15:02:56.187 回答