C++ 访问联合内结构的成员
C++ access member of a struct inside a union
我正在尝试为 Atmel 微控制器编写 C++ 程序。
我需要使用 ASF 库中已经编写的一些函数,我通过将一些代码复制到 C++ 函数中来实现。
我在编译时遇到这个错误:
'union Pm' has no member named '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++ 编译器中激活这种成员访问方式?
顺便说一句,这两个结构的成员没有命名冲突。
谢谢。
我猜你复制粘贴了代码然后修改了它。原来的代码是这样的
typedef union {
struct {
....
};
struct {
....
RwReg PM_CPUMASK;
....
};
} Pm;
什么是anonymous struct,就是一个编译器扩展,C++编译器没有这样的默认扩展,见here。
然后您为这些结构添加了名称。这就是为什么您必须使用另一个标识符来访问该成员。
对不起,如果我的猜测是错误的。但关键是你必须在那里使用一个额外的名字。
我正在尝试为 Atmel 微控制器编写 C++ 程序。
我需要使用 ASF 库中已经编写的一些函数,我通过将一些代码复制到 C++ 函数中来实现。
我在编译时遇到这个错误:
'union Pm' has no member named '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++ 编译器中激活这种成员访问方式?
顺便说一句,这两个结构的成员没有命名冲突。 谢谢。
我猜你复制粘贴了代码然后修改了它。原来的代码是这样的
typedef union {
struct {
....
};
struct {
....
RwReg PM_CPUMASK;
....
};
} Pm;
什么是anonymous struct,就是一个编译器扩展,C++编译器没有这样的默认扩展,见here。
然后您为这些结构添加了名称。这就是为什么您必须使用另一个标识符来访问该成员。
对不起,如果我的猜测是错误的。但关键是你必须在那里使用一个额外的名字。