簡體   English   中英

將引用傳遞給一個類中的另一個類

[英]Issue passing a reference to another class within a class

我創建了以下類,它有一個通過引用傳遞的對象,並按以下方式實現。

Diablo_Serial_4DLib Display(&DisplaySerial);

ZenDisplay ui(Display);
class ZenDisplay
{
  public:
    ZenDisplay(Diablo_Serial_4DLib &display);
    void setup();
  private:
    Diablo_Serial_4DLib* _display;
};

構造函數很簡單,按預期工作,到目前為止沒問題。

// Constructor /////////////////////////////////////////////////////////////////
ZenDisplay::ZenDisplay(Diablo_Serial_4DLib &display)
{
    _display = &display;
}

我想實例化 ZenSpeakerGroup 類並將相同的引用傳遞給它的構造函數

class ZenSpeakerGroup
{
  public:
    ZenSpeakerGroup(Diablo_Serial_4DLib &display);
  private:
    Diablo_Serial_4DLib* _display;
};
ZenSpeakerGroup::ZenSpeakerGroup(Diablo_Serial_4DLib &display)
{
    _display = &display;
}

我已經將原來的工人階級修改為以下

class ZenDisplay
{
  public:
    ZenDisplay(Diablo_Serial_4DLib &display);
    void setup();
  private:
    Diablo_Serial_4DLib* _display;
    ZenSpeakerGroup _speakerGroup;
};
// Constructor /////////////////////////////////////////////////////////////////
ZenDisplay::ZenDisplay(Diablo_Serial_4DLib &display) : _speakerGroup(&display)
{
    _display = &display;
}

現在我收到以下錯誤並且不能 100% 確定我做錯了什么。

Arduino: 1.8.16 (Mac OS X), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, None"

/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenDisplay.cpp: In constructor 'ZenDisplay::ZenDisplay(Diablo_Serial_4DLib&)':
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenDisplay.cpp:14:78: error: no matching function for call to 'ZenSpeakerGroup::ZenSpeakerGroup(Diablo_Serial_4DLib*)'
 ZenDisplay::ZenDisplay(Diablo_Serial_4DLib &display) : _speakerGroup(&display)
                                                                              ^
In file included from /Users/xxx/Documents/Arduino/libraries/ZenOne/ZenDisplay.h:14,
                 from /Users/xxx/Documents/Arduino/libraries/ZenOne/ZenDisplay.cpp:9:
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenSpeakerGroup.h:18:5: note: candidate: 'ZenSpeakerGroup::ZenSpeakerGroup(Diablo_Serial_4DLib&)'
     ZenSpeakerGroup(Diablo_Serial_4DLib &display);
     ^~~~~~~~~~~~~~~
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenSpeakerGroup.h:18:5: note:   no known conversion for argument 1 from 'Diablo_Serial_4DLib*' to 'Diablo_Serial_4DLib&'
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenSpeakerGroup.h:15:7: note: candidate: 'constexpr ZenSpeakerGroup::ZenSpeakerGroup(const ZenSpeakerGroup&)'
 class ZenSpeakerGroup
       ^~~~~~~~~~~~~~~
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenSpeakerGroup.h:15:7: note:   no known conversion for argument 1 from 'Diablo_Serial_4DLib*' to 'const ZenSpeakerGroup&'
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenSpeakerGroup.h:15:7: note: candidate: 'constexpr ZenSpeakerGroup::ZenSpeakerGroup(ZenSpeakerGroup&&)'
/Users/xxx/Documents/Arduino/libraries/ZenOne/ZenSpeakerGroup.h:15:7: note:   no known conversion for argument 1 from 'Diablo_Serial_4DLib*' to 'ZenSpeakerGroup&&'
exit status 1
Error compiling for board DOIT ESP32 DEVKIT V1.


This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

我也嘗試了以下但沒有成功。 _speakerGroup = new ZenSpeakerGroup(&display)我希望能得到一些幫助。

這是將顯示引用傳遞給 ZenSpeakerGroup 的正確方法

ZenDisplay::ZenDisplay(Diablo_Serial_4DLib &display) : _speakerGroup(display)
{
    _display = &display;
}

我也犯了這個錯誤,這是一個錯字

確保當您要初始化引用時將其定義為引用

class ZenDisplay{
 public:
  ZenDisplay(Diablo_Serial_4DLib &display);
  void setup();
 private:
  Diablo_Serial_4DLib& _display; // <--make sure this is a refference
 };

現在初始化參考

ZenDisplay::ZenDisplay(Diablo_Serial_4DLib &display){
  _display = display;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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