Boost statechart States in cpp aufrufen



  • Hallo Leute,

    habe in einem HeaderFile mein StateMachin, Events und States definiert.
    Ich habe die Events (Event1 und Event2), die Zustände (StartZustand und EndZustand) und die Maschine (ZustandMaschine). In der HeaderFile definiere ich einen Zustandsübergang vom StartZustand zum EndZustand über das Event "Event1".

    Nun will ich in einer cpp folgendes formulieren. Wenn ich von dem StartZustand ins EndZustand mit Event1 komme, so möcht ich dass die Operation "XY" von einer Klasse "CXyKlasse" ausgelöst wird. Wie kann ich in einer cpp das erreichen? Ich habe im Konstruktor von CTest ein Pointer von der Klasse CXyKlasse, zudem habe ich im Heaeder noch eine Membervariabel von der Klasse CXyKlasse definiert um auf die Operationen dieser Klasse zugreifen zu können.

    Ich habe es mal so probiert aber es klappt nicht! Woran kann es liegen bzw. wie kann ich es anderes formulieren?

    #include "CTest.h"
    #include "CXyKlasse"
    
    CTest::CTest(CXyKlasse *pXY)
    {
         m_pXY = pXY;
         struct StartZustand : sc::simple_state< StartZustand, ZustandMaschine> 
         {
    		typedef sc::transition< Event1, EndZustand> reactions;
                    m_pXY->XY();
         };
    }
    

    Beispiel Code für den HeaderFile:

    include <boost/statechart/event.hpp>
    #include <boost/statechart/state_machine.hpp>
    #include <boost/statechart/simple_state.hpp>
    #include <boost/statechart/transition.hpp>
    
    class CTest 
    {
    public: 
    CTest(CXyKlasse *pXY);
    virtual ~CTest();
    
    private: 
    CXyKlasse *m_pXY;
    
    namespace sc = boost::statechart;
    
    struct Event1 : sc::event< Event1 > {};
    struct Event2 : sc::event< Event2 > {};
    
    struct StartZustand;
    struct ZustandMaschine : sc::state_machine<ZustandMaschine,StartZustand>{};
    struct EndZustand;
    
    struct StartZustand : sc::simple_state< StartZustand, ZustandMaschine> 
    {
    		typedef sc::transition< Event1, EndZustand> reactions;
    };
    struct EndZustand : sc::simple_state< EndZustand, ZustandMaschine > {};
    

Anmelden zum Antworten