Integrating existing libraries into custom class

Hi there, I am struggling to understand where I am going wrong with creating some derived classes. I am trying to create a couple of derived classes that also derive form the Adafruit_ST7735 library and the Encoder library, however I keep getting the same error and can't figure out where I am going wrong. I am writing the classes in the ino file for the time being for simplicity. Any advice would be greatly appreciated

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Encoder.h>

const int8_t TFT_CS = 53, TFT_RST = 8, TFT_DC = 9;

#define PinA 2
#define PinB 3

class MyLCD : public Adafruit_ST7735{
  protected:
    Adafruit_ST7735 tft;
 
//some other variables

  public:
  MyLCD(int8_t tft_CS, int8_t tft_DC, int8_t tft_RST) : Adafruit_ST7735(tft_CS,  tft_DC, tft_RST){
    //some other assignments
  }

//some other members
};


class MyRotaryEncoder : public MyLCD, public Encoder{
  private:

    Encoder encoder;
//some other variables

  public:
    //Public variables
    
    // Constructor
    MyRotaryEncoder(int8_t pinA, int8_t pinB, int8_t tft_CS, int8_t tft_DC, int8_t tft_RST) : MyLCD(tft_CS, tft_DC, tft_RST), Encoder(pinA, pinB){
      //some other assignments
}
 
    //some other members
};

This is the error I get

/Users/olly/Documents/Arduino/TFT3/TFT3.ino: In constructor 'MyLCD::MyLCD(int8_t, int8_t, int8_t)':
/Users/olly/Documents/Arduino/TFT3/TFT3.ino:58:97: error: no matching function for call to 'Adafruit_ST7735::Adafruit_ST7735()'
   MyLCD(int8_t tft_CS, int8_t tft_DC, int8_t tft_RST) : Adafruit_ST7735(tft_CS,  tft_DC, tft_RST){
                                                                                                 ^
In file included from /Users/olly/Documents/Arduino/TFT3/TFT3.ino:3:0:
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:57:3: note: candidate: Adafruit_ST7735::Adafruit_ST7735(SPIClass*, int8_t, int8_t, int8_t)
   Adafruit_ST7735(SPIClass *spiClass, int8_t cs, int8_t dc, int8_t rst);
   ^~~~~~~~~~~~~~~
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:57:3: note:   candidate expects 4 arguments, 0 provided
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:55:3: note: candidate: Adafruit_ST7735::Adafruit_ST7735(int8_t, int8_t, int8_t)
   Adafruit_ST7735(int8_t cs, int8_t dc, int8_t rst);
   ^~~~~~~~~~~~~~~
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:55:3: note:   candidate expects 3 arguments, 0 provided
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:54:3: note: candidate: Adafruit_ST7735::Adafruit_ST7735(int8_t, int8_t, int8_t, int8_t, int8_t)
   Adafruit_ST7735(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk, int8_t rst);
   ^~~~~~~~~~~~~~~
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:54:3: note:   candidate expects 5 arguments, 0 provided
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:52:7: note: candidate: constexpr Adafruit_ST7735::Adafruit_ST7735(const Adafruit_ST7735&)
 class Adafruit_ST7735 : public Adafruit_ST77xx {
       ^~~~~~~~~~~~~~~
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:52:7: note:   candidate expects 1 argument, 0 provided
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:52:7: note: candidate: constexpr Adafruit_ST7735::Adafruit_ST7735(Adafruit_ST7735&&)
/Users/olly/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST7735.h:52:7: note:   candidate expects 1 argument, 0 provided
/Users/olly/Documents/Arduino/TFT3/TFT3.ino: In constructor 'MyRotaryEncoder::MyRotaryEncoder(int8_t, int8_t, int8_t, int8_t, int8_t)':
/Users/olly/Documents/Arduino/TFT3/TFT3.ino:134:145: error: no matching function for call to 'Encoder::Encoder()'
     MyRotaryEncoder(int8_t pinA, int8_t pinB, int8_t tft_CS, int8_t tft_DC, int8_t tft_RST) : MyLCD(tft_CS, tft_DC, tft_RST), Encoder(pinA, pinB){
                                                                                                                                                 ^
In file included from /Users/olly/Documents/Arduino/TFT3/TFT3.ino:4:0:
/Users/olly/Documents/Arduino/libraries/Encoder/Encoder.h:79:2: note: candidate: Encoder::Encoder(uint8_t, uint8_t)
  Encoder(uint8_t pin1, uint8_t pin2) {
  ^~~~~~~
/Users/olly/Documents/Arduino/libraries/Encoder/Encoder.h:79:2: note:   candidate expects 2 arguments, 0 provided
/Users/olly/Documents/Arduino/libraries/Encoder/Encoder.h:76:7: note: candidate: constexpr Encoder::Encoder(const Encoder&)
 class Encoder
       ^~~~~~~
/Users/olly/Documents/Arduino/libraries/Encoder/Encoder.h:76:7: note:   candidate expects 1 argument, 0 provided
/Users/olly/Documents/Arduino/libraries/Encoder/Encoder.h:76:7: note: candidate: constexpr Encoder::Encoder(Encoder&&)
/Users/olly/Documents/Arduino/libraries/Encoder/Encoder.h:76:7: note:   candidate expects 1 argument, 0 provided

If you inherit from Adafruit_ST7735, then you don't also want a data member of that type:

Works perfectly now, thank you!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.