Я пытаюсь манипулировать «registerTable» с помощью «ChargerClass :: SystemStruct :: initNested ()» с помощью функции из объекта, переданного во время инициализации «interface».
Причина, по которой я хочу вложитьдолжен разрешить использование точечной нотации для использования членов класса;в этом классе будет много функций, и точечная нотация прояснит, какая часть класса используется.
'chargerHAL_r hal' должен быть передан, так как это объект уровня абстракции, допускающий несколькопротоколы связи, которые будут использоваться с ChargerClass.
Если initNested () находится внутри 'SystemStruct', я получаю ошибки компилятора:
- недопустимое использование элемента нестатических данных 'ChargerClass:: interface '
- недопустимое использование элемента нестатических данных' ChargerClass :: registerTable '
Однако, если initNOTNested () находится в родительском классе ChargerClass и не вложен в SystemStruct.он прекрасно компилируется.
Я включил комментарии во фрагмент кода как для initNested (), так и для initNOTNested ();
Я использую C ++ 11, и начиная с этой версии, nested-Доступ класса к членам вмещающего класса действителен, нет?
Что мне не хватает?
struct chargerHAL_r {
static void readAllRegisters(uint8_t *regTable);
};
class ChargerClass {
public:
ChargerClass(chargerConfig_r config, chargerHAL_r hal) {
interface = hal;
}
struct system_r {
bool initNested(); /* Compiler throws error */
};
bool initNotNested(); /* Compiles OK */
private:
uint8_t registerTable[20];
chargerHAL_r interface;
};
/* Compiler throws error */
bool ChargerClass::system_r::initNested() {
interface.readAllRegisters(registerTable);
}
/* Compiles OK */
bool ChargerClass::initNotNested() {
interface.readAllRegisters(registerTable);
}