2016-11-17 39 views
-1

對不起,由於我在C++方面缺乏經驗,因此我無法準確理解代碼中發生了什麼以及爲什麼無法初始化對象。無法初始化自定義類中的對象

我使用的是類我在GitHub上找到其中包含以下相關的代碼(我刪除代碼,我相當肯定是不相關的):

Bee.h:

class Bee { 
public: 
    Bee(HardwareSerial *serial, uint32_t baud); 
private: 
    // Prevent heap allocation 
    void * operator new (size_t); 
    void * operator new[] (size_t); 
}; 

Bee.cpp

#include "Bee.h" 

Bee::Bee(HardwareSerial *serial, uint32_t baud) { 
    // set some variables 
} 

所以在github的例子是一個Arduino和他們ü選擇行Bee XBee(&Serial1, 9600);以在setup()和loop()函數上方的.ino文件中初始化名爲XBee的對象。

我在建立一個需要一個蜜蜂對象的類。所以,我想這一點:

ADXBee.h

#ifndef _ADXBee_h 
#define _ADXBee_h 

#include "Bee.h" 

class ADXBee { 
public: 
    ADXBee(); 
private: 
    Bee _bee; 
}; 

ADXBee.cpp

#include "ADXBee.h" 

ADXBee::ADXBee(){ 
    // Initialize serial 
    Serial1.begin(9600); 

    // Initialize Bee 
    Bee _bee(&Serial1, 9600); 
} 

我已經嘗試了許多不同的方法來初始化這一點,可惜我只是不沒有背景可以用我可以谷歌的方式提出這個問題。當我嘗試運行此代碼,我得到這個錯誤:

ADXBee.h:66:30: warning: non-static data member initializers only available with -std=c++1 
1 or -std=gnu++11 [enabled by default] 
ADXBee.cpp:In constructor 'ADXBee::ADXBee()' 
ADXBee.cpp:16:16: error: no matching function for call to 'Bee::Bee()' 
ADXBee*:ADXBee(){ 
ADXBee.cpp:candidates are 
Bee.h:Bee(SoftwareSerial*, uint32_t) 
Bee.h:candidate expects 2 arguments, 0 provided 
Bee.h:Bee(HardwareSerial*, uint32_t) 
Bee.h:candidate expects 2 arguments, 0 provided 
Bee.h:Bee(const Bee&) 
Bee.h:candidate expects 1 argument, 0 provided 
Error compiling 
+0

如果您「缺乏C++經驗」,那麼學習C++的正確方法是閱讀一本書,而不是嘗試解譯「我在github上找到的類」。這不是你學習C++的方式。用一本好書閱讀和學習C++,直到你學會了足夠能夠自己理解別人的代碼。 –

+0

我認識到這是真的,我在努力提高生產力的同時閱讀並行:/ – eeScott

回答

0
// Initialize Bee 
Bee _bee(&Serial1, 9600); 

不會初始化同名的成員。它只是創建一個函數本地對象。您需要在函數體開始之前使用初始化程序列表對其進行初始化。

ADXBee::ADXBee() : _bee(<something>, 9600) { ... } 

我不知道<something>需要是因爲它不是從你的文章清楚是什麼將是HardwareSerial *serial一個很好的價值是什麼。

+0

這工作,謝謝!我會去做一些閱讀,試圖更好地理解這裏發生的事情。 – eeScott

+0

@eeScott,不客氣。快樂編程! –