当使用嵌套类功能时,使用非静态数据成员的使用无效,但是当函数未固定时可以
Invalid use of non-static data member when nested class function is used, but OK when the function is not-nested?
我试图用'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
。
我认为这是解决您问题的解决方法。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- 是否可以制作一个定时函数,该函数可以将函数作为参数调用,然后运行并计时
- C#/.NET定时器和Win32睡眠函数都是不精确的
- 每当表达式不确定时,启用C 中的函数模板
- c++实现定时回调函数
- 在 CPP 中将函数调用定时为 if 语句条件
- 使用线程以定时间隔调用函数
- c++定时器实现-将一个成员函数分配给信号回调函数指针
- c++中的回调定时器函数
- 绘制函数定时器openframeworks
- 迷你OS -III定时器回调函数没有被调用
- 如何在popen函数中插入定时器
- 在优化和定时的c++代码中从函数中获取数据所带来的难以解释的开销
- std::function带有定时器成员函数的c++
- std::函数参数的不同重载在绑定时是不明确的(有时)