簡體   English   中英

從外部 class function 初始化一個新的嵌套 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM