J'essaye d'écrire un programme C++ pour un microcontrôleur Atmel.Membre d'accès C++ d'une structure dans une union
Je dois utiliser certaines des fonctions qui ont déjà été écrites dans la bibliothèque ASF, et je le fais en copiant une partie du code dans les fonctions C++.
-je obtenir cette erreur sur la compilation:
'union Pm' est pas membre nommé 'PM_CPUMASK'
L'union de type Pm
ressemble à quelque chose comme ceci:
typedef union {
struct {
....
} bf;
struct {
....
RwReg PM_CPUMASK;
....
} reg;
} Pm;`
Dans le code ASF, le membre PM_CPUMASK
est accédé comme ceci:
unsigned int mask = *(&PM->PM_CPUMASK + busId);
Mais j'obtiens une erreur. Je pense que cela est valide en C, mais en C++, j'aurais besoin d'accéder à la structure nommée, puis au membre réel. En utilisant *(&PM->reg.PM_CPUMASK...)
Je ne reçois aucune erreur, mais existe-t-il un moyen d'activer ce style d'accès membre dans le compilateur C++?
BTW, il n'y a pas de conflits de nommage dans les membres des 2 structs. Merci.
Pour moi, ça ne ressemble pas non plus à un C valide. Vous pouvez essayer de supprimer les noms de structure internes ('bf' et' reg'). Cela ferait fonctionner le code si votre compilateur supporte les structures anonymes comme une extension (non-standard). (Sinon, la seule autre option est '#define PM_CPUMASK reg.PM_CPUMASK', mais c'est un hack moche.) – HolyBlackCat