C ++ доступ к элементу структуры внутри объединения

Я пытаюсь написать программу на C ++ для микроконтроллера Atmel.

Мне нужно использовать некоторые функции, которые уже были написаны в библиотеке 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

Решение

Я думаю, что вы скопировали код, а затем изменили его. Оригинальный код был примерно таким

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

Что такое анонимная структура, это расширение компилятора, и нет никаких расширений по умолчанию, как это для компилятора C ++, см. Вот.

А потом вы добавили имена к этим структурам. Вот почему вы должны использовать другой идентификатор для доступа к члену.

Извините, если мои догадки неверны. Но дело в том, что вы должны использовать дополнительное имя там.

3

Другие решения

Других решений пока нет …


Курсы программирования от Skillbox. Черная пятница!
Подробнее >>>
×