C++ syntax question - Defining an object in a class that requires arguments?



  • I need some help with how to properly define an object in a class as a public object of the class for objects that require arguments. I would like to hardcode the arguments. For example I want to make the second UART port in a class and hardcode the UART to 2.

    .h file for class

    #ifndef TestClass_h
    #define TestClass_h
    
    #include "Arduino.h"
    #include <M5Unified.h>
    
    class TestClass {
      public:
        //-- Define RS458 to UART to UART2, HardwareSerial needs a UART number passed to it --
    
        //What I have tried, I would like to hardcode the UART number to 2. How do I do this?????
        HardwareSerial SerialRS485; // 1 - Does not compile, I need something in the .cpp file to make this work
        HardwareSerial SerialRS485(uint8_t _uart); // 2 - Can get this to compile but then does not compile if I use a uncomment the test funciton
        HardwareSerial SerialRS485(uint8_t 2); // 3 - Does not compile
    
        //constructor
        TestClass();
          
        //Functions - Main
        void testFunction();
    
    
      private:
        uint16_t _private1 = 0;
    
    };
    
    #endif
    

    .cpp file for class

    #include "TestClass.h"
    #include "Arduino.h"
    
    //Constructor def
    TestClass::TestClass() {
    }
    
    void TestClass::testFunction() {
        Serial.println("USB Serial Port");
        SerialRS485.println("RS485 Serial Port");
    }
    

    main ino file

    #include "Arduino.h"
    #include <M5Unified.h> //For M5Stack ESP Hardware
    
    //Create test class
    #include "TestClass.h"
    TestClass TestObject;
    
    void setup(void)
    {
      auto cfg = M5.config();  //M5 Unified config
      M5.begin(cfg);
      delay(500);
    }
    
    void loop(void)
    {
      M5.update(); //Update button state
      TestObject.testFunction();
      delay(1000);
    }
    


  • @lukes said in C++ syntax question - Defining an object in a class that requires arguments?:

    HardwareSerial

    Maybe this solves your problem ...

    class StaticClass {
    private:
        int myContent;
    public:
        StaticClass(int v){myContent = v;}
    
        void printout(){printf("%d\n",myContent);}
    };
        
    
    class TestClass {
    
    public:
        //StaticClass myClass = StaticClass(42);    // With C11
        StaticClass myClass;
            
        TestClass() : myClass(42)
        {
        }
            
        void doit()
        {
            myClass.printout();
        }
    };
    
    
    int main(void)
    {
        TestClass tc;
        
        tc.doit();
    }