gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:38:10 26 4
gpt4 key购买 nike

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

最佳答案

几乎是正确的,但是 DHT _dht(uint8_t, uint8_t); 是方法原型(prototype)(而不是 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};
};

关于c++ - ((Thermostat*)this)->Thermostat::_dht' 没有类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48366479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com