慢慢习惯c++...
最近在弄一个项目,用c++开发。刚才碰到这个报错,由于是复制同事的代码,一事不知所措。
‘using element_type = class modules_bluetoothtransparent::BluetoothTransparentModule’ {aka ‘class modules_bluetoothtransparent::BluetoothTransparentModule’} has no member named ‘InitLog’; did you mean ‘Init’?
pobjBluetoothTransparentModuleule->InitLog();
排查发现,是InitLog在类中没有定义。
仔细看编译其实已经给了提示,没有成员名称。还给出了提示 Init 。
bool BluetoothTransparentModInitializer::InitModule(
module_management::ModuleResource *pobjModResource,
std::shared_ptr<module_management::BaseModule> pobjModule) {
if (NULL == pobjModResource || nullptr == pobjModule) {
ac_("cloudlog init failed, input pointer null");
return false;
}
std::shared_ptr<BluetoothTransparentModule> pobjBluetoothTransparentModuleule =
std::dynamic_pointer_cast<BluetoothTransparentModule>(pobjModule);
if (nullptr == pobjBluetoothTransparentModuleule) {
ac_("module %s init failed, cast error", pobjModule->GetModuleName().c_str());
ac_("BluetoothTransparentModule typeid: {}", typeid(BluetoothTransparentModule).name());
ac_("*pobjModule typeid: {}", typeid(*pobjModule).name());
return false;
}
pobjBluetoothTransparentModuleule->Init();
pobjBluetoothTransparentModuleule->InitLog();
ac_("module %s inited", pobjBluetoothTransparentModuleule->GetModuleName().c_str());
return true;
}
class BluetoothTransparentModule : public BaseModule {
public:
virtual ~BluetoothTransparentModule() {}
bool Init(void) override;
bool Uninit(void) override;
virtual bool SetCommModule(std::shared_ptr<modules_comm::CommModule> spComm);
};
解决:把InitLog成员加上并实现即可。
class BluetoothTransparentModule : public BaseModule {
public:
virtual ~BluetoothTransparentModule() {}
bool Init(void) override;
bool Uninit(void) override;
virtual int32_t InitLog(void);
virtual bool SetCommModule(std::shared_ptr<CommModule> spComm);
};