我试图用'ChargerClass :: SystemStruct :: initNested()'来操作'registerTable',并使用在初始化'界面'期间传入的对象的函数。
我想嵌套的原因是允许使用点表示法来使用Class成员;这个类中会有很多函数,点符号会清楚表明该类的哪个部分正在被利用。
'chargerHAL_r hal'必须传入,因为它是一个抽象层对象,允许多个通信协议与ChargerClass一起使用。
如果initNested()在'SystemStruct'中,我会遇到编译器错误:
但是,如果initNOTNested()在父类ChargerClass中而不是嵌套在SystemStruct中。它编译得很好。
我在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);
}
答案 0 :(得分:1)
您可能误解了嵌套类的含义
嵌套类是具有特殊访问权限的独立类。这意味着定义system_r
的实例与ChargerClass
无关,因此它不会知道您正在谈论的interface
或registerTable
。
我会将this视为您问题的解决方法。