我试图用'ChargerClass :: Systemsstruct :: Initnested(('来操纵'registertable',并在初始化'接口'中传递的函数。
。我要嵌套的原因是启用使用点符号使用类成员;该课程中将有很多功能,DOT符号将清楚使用该类的哪个部分。
'chargerhal_r hal'必须传递,因为它是一个抽象层对象,以允许与ChargerClass一起使用多个通信协议。
如果initnested((在" systemstruct"中,我会得到编译器错误:
- 非静态数据成员的ChargerClass ::接口' 无效的使用
- 非静态数据成员的ChargerClass :: register-table' 的使用无效
但是,如果Initnotnested((在父类ChargerClass中,而不是嵌套在Systems struct中。它可以很好地编译。
我在initnested((和initnotnested((;
;我正在使用C 11,由于此版本,嵌套级成员的嵌套级访问是有效的,否?
我缺少什么?
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);
}
您可能已经误解了嵌套类是什么。
嵌套类是具有特殊访问特权的独立类。这意味着定义system_r
实例与ChargerClass
无关,因此它不知道您在说什么interface
或registerTable
。
我认为这是解决您问题的解决方法。