2016-11-17 87 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,不客气。快乐编程! –

相关问题