((Thermostat*)this)->Thermostat::_dht' 没有类类型

Posted

技术标签:

【中文标题】((Thermostat*)this)->Thermostat::_dht\' 没有类类型【英文标题】:((Thermostat*)this)->Thermostat::_dht' does not have class type((Thermostat*)this)->Thermostat::_dht' 没有类类型 【发布时间】:2018-01-21 11:55:37 【问题描述】:

我正在尝试创建一个名为 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

【问题讨论】:

【参考方案1】:

几乎是正确的,但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 _dht7, DHT22;
;

【讨论】:

谢谢,问题解决了。我选择直接指定它,代码更简洁,Thermostat 的初始化函数看起来很干净。非常感谢。

以上是关于((Thermostat*)this)->Thermostat::_dht' 没有类类型的主要内容,如果未能解决你的问题,请参考以下文章

18 D - This cheeseburger you don't need(URAL1993)

rxjs TypeError:this._complete不是函数

java <T>T和T的区别

IEquatable<T>.Equals 中的条件

构建一个简单的 linq to sql

Forbidden You don't have permission to access XXX on this server