I am writing an Arduino project and try to wrap my own class around the DHT (Sensor) library (https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHT_Unified_Sensor/DHT_Unified_Sensor.ino or that https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino).
I wanna abstract my own Library with functions and use that to learn C++.
But I have a problem when I try to instantiate my own class:
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)
Can someone please tell me how to declare, instantiate and call the DHT class within my own class? When I implement DHT
main.cpp
#include "Hythe.h"
Hythe hythe(HYTHE_PIN, HYTHE_TYPE); // here I instantiate the sensor.
void setup()
{
hythe.getSensorInfo();
}
Hythe.h
#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
};
Hythe.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"));
}
As Vlad points out, DHT
has no default constructor. You want to use initializer list to avoid calling a default constructor. You can directly call DHT's constructor in the initializer list this way.
Hythe::Hythe(uint8_t dht_pin, uint8_t dht_type): _dht(dht_pin, dht_type)
{
Serial.print(dht_pin);
}