我正在尝试创建一个名为Thermostat的Arduino类,它使用DHT库。
我认为,对于_dht实例的声明和初始化,错误可能出现了混淆。
我的目标只是让我的主草图干净,让类Thermostat处理与DHT相关的一切。
这是我的素描:
#include "Thermostat.h"
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}这是我的Thermostat.h文件:
/*
Thermostat.h - Library for smart thermostat
*/
#ifndef Thermostat_h
#define Thermostat_h
#include "Arduino.h"
#include <DHT.h>
class Thermostat {
public:
Thermostat();
void DHTstart();
private:
DHT _dht(uint8_t, uint8_t); //// Initialize DHT sensor for normal 16mhz Arduino
};
// class initialization
Thermostat::Thermostat(){
_dht(7,DHT22);
}
void Thermostat::DHTstart(){
_dht.begin();
}
#endif我得到了以下错误:
In file included from /Users/olmo/Documents/Arduino/debug_DTH_inClass/debug_DTH_inClass.ino:2:0:
sketch/Thermostat.h: In member function 'void Thermostat::DHTstart()':
Thermostat.h:24: error: '((Thermostat*)this)->Thermostat::_dht' does not have class type
_dht.begin();
^
exit status 1
'((Thermostat*)this)->Thermostat::_dht' does not have class type发布于 2018-01-21 13:22:17
这几乎是正确的,但是DHT _dht(uint8_t, uint8_t);是方法原型(而不是DHT实例)。并且必须在构造函数初始化程序列表中初始化此实例:
class Thermostat {
public:
Thermostat();
void DHTstart();
private:
DHT _dht; //// Initialize DHT sensor for normal 16mhz Arduino
};
// class initialization
Thermostat::Thermostat()
: _dht(7,DHT22) // construct DHT instance with expected parameters
{ ; }
void Thermostat::DHTstart(){
_dht.begin();
}或者更短的版本:
class Thermostat {
public:
Thermostat() : _dht(7, DHT22) {;}
void DHTstart() { _dht.begin(); }
private:
DHT _dht;
};在这种情况下( DHT类的魔术值),您可以使用c++11特性(因为Arduino 1.6.5)并直接指定它,因此可以使用默认构造函数:
class Thermostat {
public:
void DHTstart() { _dht.begin(); }
private:
DHT _dht{7, DHT22};
};https://stackoverflow.com/questions/48366479
复制相似问题