Class Dependency Injection?? "cannot call constructor directly"



  • Hallo zusammen,

    Ich habe mir eine Klasse für mein Arduino programmiert wo ich auf eine weitere bestehend Klasse zugreifen will.
    Wenn ich das so programmiere wie unten bekomme ich die Fehlermeldung "cannot call constructor directly"
    Ich habe auch den Tipp bekommen das ganze mit "Constuctor Injection, oder per Setter Injektion" zu implementieren was aber das verstehe ich nicht.
    Kann mir jemand weiterhelfen?

    Actor.h

    #include "NewRemoteTransmitter.h"
    
    class Actor {
    
    private:
        unsigned long id;
        int unit;
        bool state;
    
    public:
        Actor(unsigned long i, int u);
    
        void toggle() {
        	const int pin = 11;
        	const unsigned int delay = 260;
        	const byte repeat = 3;
            if ( !state ) {
                state = true;
                NewRemoteTransmitter::NewRemoteTransmitter(id, pin, delay, repeat).sendUnit(unit, 1);
            }
            else {
                state = false;
                NewRemoteTransmitter::NewRemoteTransmitter(id, pin, delay, repeat).sendUnit(unit, 0);
            }
        }
    };
    

    Actor.cpp

    #include "Actor.h"
    
    Actor::Actor(unsigned long i, int u = 0) {
        id = i;
        unit = u;
        state = false;
    }
    

    Sketch

    #include <Arduino.h>
    
    Actor Living1(7402746, 0);
    void loop() {
    	Living1.toggle();
    	Living1.toggle();
    }
    

    Grüsse

    Marc



  • Das ist mein Beitrag, da ist wohl was falsch mit der Anmeldung gelaufen 🙂


  • Mod

    NewRemoteTransmitter::NewRemoteTransmitter benennt den Konstruktor von NewRemoteTransmitter , was nach [class.qual]/1 in diesem Kontext ill-formed ist. Schreib einfach

    NewRemoteTransmitter(id, pin, delay, repeat).sendUnit(unit, 1);
    


  • Vielen Dank, das wars schon, der Compiler ist ohne Fehlermeldung durchgelaufen.
    Manchmal studiert man viel zu viel und sieht die einfachste Lösung nicht 🙂

    Danke!


Anmelden zum Antworten