无法初始化自定义类中的对象
对不起,由于我在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
// Initialize Bee
Bee _bee(&Serial1, 9600);
不会初始化同名的成员。它只是创建一个函数本地对象。您需要在函数体开始之前使用初始化程序列表对其进行初始化。
ADXBee::ADXBee() : _bee(<something>, 9600) { ... }
我不知道<something>
需要是因为它不是从你的文章清楚是什么将是HardwareSerial *serial
一个很好的价值是什么。
这工作,谢谢!我会去做一些阅读,试图更好地理解这里发生的事情。 – eeScott
@eeScott,不客气。快乐编程! –
如果您“缺乏C++经验”,那么学习C++的正确方法是阅读一本书,而不是尝试解译“我在github上找到的类”。这不是你学习C++的方式。用一本好书阅读和学习C++,直到你学会了足够能够自己理解别人的代码。 –
我认识到这是真的,我在努力提高生产力的同时阅读并行:/ – eeScott