[英]Initializing a new nested class from outer class function
我目前正在構建項目時學習 C++ 中的嵌套類,我目前在setupBLE()
中我需要傳遞一個嵌套類但是要init
新的 class 我需要將外部 class 傳遞給它的構造函數以便它可以訪問它變量和函數,但我不確定如何將試圖創建它的 class 的指針傳遞給構造函數。
這有點令人困惑,所以我希望代碼對它有所幫助。
就像在 python 中,我們有self
但在 C++ 中,據我所知我們沒有,所以我想知道我應該將什么傳遞給構造函數。
代碼(PillDispenser.h):
class PillDispenser {
public:
explicit PillDispenser(BLEAddress deviceAddress);
private:
BLEAddress _device_address;
BLEAdvertisedDevice _device;
bool _connected;
// Device properties
std::string _device_name;
// Callbacks
static void notifyCallBack();
class AdvertisedDeviceCallBack : public BLEAdvertisedDeviceCallbacks {
PillDispenser &_outer;
explicit AdvertisedDeviceCallBack(PillDispenser &outer) : _outer(outer){};
void onResult(BLEAdvertisedDevice advertisedDevice) override;
};
}
代碼(PillDispenser.cpp):
void PillDispenser::setupBLE() {
BLEScan *scanner = BLEDevice::getScan();
scanner->setAdvertisedDeviceCallbacks(new AdvertisedDeviceCallBack());
scanner->setInterval(SCAN_INTERVAL);
scanner->setWindow(SCAN_WINDOW);
scanner->setActiveScan(true);
scanner->start(SCAN_DURATION);
}
此行試圖使用不存在的默認構造函數
scanner->setAdvertisedDeviceCallbacks(new AdvertisedDeviceCallBack());
相反,您應該使用您定義的顯式構造函數
scanner->setAdvertisedDeviceCallbacks(new AdvertisedDeviceCallBack(*this));
請注意, this
(在此上下文中)具有PillDispenser*
類型,因此您必須使用*
取消引用才能獲得PillDispenser&
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.