Я пытаюсь написать программу на 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 ++?
Кстати, между членами двух структур нет конфликтов имен.
Благодарю.
Я думаю, что вы скопировали код, а затем изменили его. Оригинальный код был примерно таким
typedef union {
struct {
....
};
struct {
....
RwReg PM_CPUMASK;
....
};
} Pm;
Что такое анонимная структура, это расширение компилятора, и нет никаких расширений по умолчанию, как это для компилятора C ++, см. Вот.
А потом вы добавили имена к этим структурам. Вот почему вы должны использовать другой идентификатор для доступа к члену.
Извините, если мои догадки неверны. Но дело в том, что вы должны использовать дополнительное имя там.
Других решений пока нет …