当使用嵌套类功能时,使用非静态数据成员的使用无效,但是当函数未固定时可以



我试图用'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无关,因此它不知道您在说什么interfaceregisterTable
我认为这是解决您问题的解决方法。

最新更新