Falsche Initialisierung durch die Initialisierungsliste



  • Hallo Experten,
    die member-Variablen "_in1"..._"in4" werden durch die Initialisierungsliste im Konstruktor nicht richtig gesetzt. Die anderen Membervariablen (_delay und __gate) jedoch richtig.
    Hier meine Code:

    // Transition.h
    class Transition : public ProcessObject
    {
    public:
        Transition(std::string name, int delay, bool gate, bool in1, bool in2, bool in3, bool in4);
    
        ...
    
        // events
        Event evFalse, evTrue, evBlocked, evTransmit;
    
        ...
    
    protected:
        std::string _name;
    
    private:
        bool _gate;
        int _delay;
        bool _in1;
        bool _in2;
        bool _in3;
        bool _in4;
    
    };
    
    // Transition.cpp
    Transition::Transition(std::string name, int delay, bool gate, bool in1, bool in2, bool in3, bool in4):
                                                                    _delay(delay),//richtig gesetzt (0)
                                                                    _gate(gate),//richtig gesetz (true)
                                                                    _in1(in1),//falsch gesetzt (false und nicht true)
                                                                    _in2(in2),//falsch gesetzt (false und nicht true)
                                                                    _in3(in3),//falsch gesetzt (false und nicht true)
                                                                    _in4(in4),//falsch gesetzt (false und nicht true)
                                                                    evFalse{"evFalse"},
                                                                    evTrue{"evTrue"},
                                                                    evBlocked{"evBlocked"},
                                                                    evTransmit{"evTransmit"},
                                                                    ProcessObject(name)
    {
     ...
    }
    

    Der Aufruf in der mein so:

    //main.cpp
    main{
    ...
    Transition T1Einpresseinheit("T1Einpresseinheit", 0, true, true, true, true, true);
    ...
    }
    

    Die member-Variablen _delay und _gate werden richtig initialisiert, sind also "0" bzw. "true".
    Die nachfolgenden Variablen _in1 ... _in4 jedoch sind nach der Objektinstanzierung alle vier "false" und nicht "true" wie ich es in der main()angegeben habe.

    Was mache ich hier falsch?

    Danke schon einmal im voraus!


  • Mod

    Das sollte nicht der Fall sein. Wie ud wo stellst du fest, dass die Membervariablen einen falschen Wert enthalten?
    Nebenbei sei bemerkt, dass es schlechter Stil ist, die einzelnen Member in der Ini9ntialisierungsliste nicht in der Reihenfolge aufzulisten, in der die Initialisierung tatsächlich erfolgt (=Reihenfolge der Deklarationen).



  • Bin aktuell verwirrt!
    Wenn ich im Konstruktor mit die _in1..._in4 über cout ausgeben lasse sind diese richtig gesetzt. Im Debugger sind diese falsch gesetzt. Habe den Breakpoint nach der Instanzieriung von T1Einschiebeeinheit gesetzt.

    // main
    main{
    ...
    Transition T1Einpresseinheit("T1Einpresseinheit", 0, true, true, true, true, true);
    IFsoftStop SoftStop("SoftStop"); //Hier Breakpoint gesetzt
    ...
    }
    

    Wenn ich mir die _in1..._in4 am Breakpoint anschaue sind diese falsch gesetzt.
    Ehrlich gesagt verstehe ich das nicht.
    Ich glaube komme aber weiter.



  • Danke camper !
    Ich hab's gefunden. Es ist noch nach der Initialisierung "etwas" passiert. Cout-und Debuggausgabe waren beide korrekt.. nur zu anderen Zeitpunkten


Log in to reply