gpt4 book ai didi

c++ - 使用嵌套类函数时非静态数据成员的使用无效,但是当函数未嵌套时可以吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:08 24 4
gpt4 key购买 nike

我正在尝试使用“ChargerClass::SystemStruct::initNested()”操作“registerTable”,并使用初始化“接口(interface)”期间传入的对象的函数。

我想嵌套的原因是为了能够使用点符号来使用类成员;这个类中将有很多函数,点符号将清楚地表明正在使用该类的哪一部分。

'chargerHAL_r hal' 必须传入,因为它是一个抽象层对象,允许多个通信协议(protocol)与 ChargerClass 一起使用。

如果 initNested() 在“SystemStruct”中,我会得到编译器错误:

  • 非静态数据成员“ChargerClass::interface”的无效使用
  • 无效使用非静态数据成员“ChargerClass::registerTable”

但是,如果 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);
}

最佳答案

你可能误解了什么是嵌套类。
嵌套类是具有特殊访问权限的独立类。这意味着定义 system_r 的实例无论如何都不会与 ChargerClass 相关,因此它不知道什么是 interfaceregisterTable 你在说什么。
我会考虑 this作为您问题的解决方法。

关于c++ - 使用嵌套类函数时非静态数据成员的使用无效,但是当函数未嵌套时可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50031362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com