-1

我正在编写一个Arduino项目并尝试将我自己的类包装在 DHT(传感器)库(https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHT_Unified_Sensor/DHT_Unified_Sensor.ino或那个https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino)。

我想用函数抽象我自己的库,并用它来学习 C++。

但是当我尝试实例化自己的类时遇到问题:

lib/Hythe/Hythe.cpp: In constructor 'Hythe::Hythe(uint8_t, uint8_t)':
lib/Hythe/Hythe.cpp:3:47: error: no matching function for call to 'DHT::DHT()'
 Hythe::Hythe(uint8_t dht_pin, uint8_t dht_type)

有人可以告诉我如何在我自己的类中声明、实例化和调用 DHT 类吗? 当我实施 DHT

主文件

#include "Hythe.h"
Hythe hythe(HYTHE_PIN, HYTHE_TYPE); // here I instantiate the sensor.

void setup()
{
  hythe.getSensorInfo();
}

海思


#include "SPI.h"
#include "Wire.h"
#include <DHT.h>

class Hythe
{
private:
    float temperature;
    float humidity;
    uint32_t delayMS;
public:
    Hythe(uint8_t, uint8_t);        // init with PIN and TYPE
    DHT _dht; // THIS IS CAUSING THE ERROR
    // (It's in the header file. I simply wanna declare it and
    // call it in the cpp file later).
    // When I remove this line I get: 
    // "error: '_dht' was not declared in this scope"

    unsigned char getTemperature(); // read the temperature
    void getSensorInfo();           // returns sensor info

};

海思.cpp

#include "Hythe.h"

Hythe::Hythe(uint8_t dht_pin, uint8_t dht_type)
{
    Serial.print(dht_pin);
    _dht = DHT(dht_pin, dht_type);
}

unsigned char Hythe::getTemperature()
{
    return 0;
}

void Hythe::getSensorInfo()
{
    Serial.println(F("------------------------------------"));
    Serial.println(F("Temperature Sensor"));
}


4

1 回答 1

2

正如 Vlad 指出的那样,DHT没有默认构造函数。您想使用初始化列表来避免调用默认构造函数。您可以通过这种方式在初始化列表中直接调用 DHT 的构造函数。

Hythe::Hythe(uint8_t dht_pin, uint8_t dht_type): _dht(dht_pin, dht_type)
{
    Serial.print(dht_pin);
}
于 2019-06-17T18:46:04.630 回答