首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >((恒温器*)这个)->Thermostat::_dht‘没有类类型

((恒温器*)这个)->Thermostat::_dht‘没有类类型
EN

Stack Overflow用户
提问于 2018-01-21 11:55:37
回答 1查看 161关注 0票数 0

我正在尝试创建一个名为Thermostat的Arduino类,它使用DHT库。

我认为,对于_dht实例的声明和初始化,错误可能出现了混淆。

我的目标只是让我的主草图干净,让类Thermostat处理与DHT相关的一切。

这是我的素描:

代码语言:javascript
复制
#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文件:

代码语言:javascript
复制
/*
  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

我得到了以下错误:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-21 13:22:17

这几乎是正确的,但是DHT _dht(uint8_t, uint8_t);是方法原型(而不是DHT实例)。并且必须在构造函数初始化程序列表中初始化此实例:

代码语言:javascript
复制
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();
}

或者更短的版本:

代码语言:javascript
复制
class Thermostat {
  public:
    Thermostat() : _dht(7, DHT22) {;}
    void DHTstart() { _dht.begin(); }
  private:
    DHT _dht;
};

在这种情况下( DHT类的魔术值),您可以使用c++11特性(因为Arduino 1.6.5)并直接指定它,因此可以使用默认构造函数:

代码语言:javascript
复制
class Thermostat {
  public:
    void DHTstart() { _dht.begin(); }
  private:
    DHT _dht{7, DHT22};
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48366479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档