Problem mit State Pattern + Forward declaration
-
Hallo,
bin gerade dabei einen Verkaufsautomaten zu implementieren. Hierbei verwende ich das State Design Pattern.
Mein Basis-Status (von dem alle konkreten Zustände erben):
class Context; class BaseState { protected: char *description; int identifier; public: virtual ~BaseState(); virtual Hardware::VendingMachine::State::BaseState *handle(Context*) = 0; virtual char *toString() = 0; virtual int getStateIdentifier() = 0; };
Hier der Aufruf der handle-Methode (des konkreten Zustands) im Kontext (Verkaufsautomat):
bool Hardware::VendingMachine::Context::stateChanged() { if (this->currentState) { this->currentState->handle(this); //... } }
Beim Kompilieren tritt folgender Fehler auf:
no matching function for call to 'Hardware::VendingMachine::State::BaseState::handle(Hardware::VendingMachine::Context* const)'
Klar ist, dass an dieser Stelle ein Typ wie in der Forward-Declaration mit Hardware::VendingMachine::State::BaseState::Context* angegeben, erwartet wird. Der übergebene this-Zeiger ist jedoch vom Typ Hardware::VendingMachine::Context*
Habe mich an folgendem Beispiel orientert: http://www.henkessoft.de/Roboter/Nibo.htm#mozTocId872713. Dort funktioniert die ganze State-Pattern-Geschichte augenscheinlich.
Danke!
-
Keine Lust den Link zu lesen, darum rate ich mal ein bischen was du machst (könnte man auch einfach gekürzt, aber vollständig hier reinschreiben).
namespace Hardware { namespace VendingMachine { class Context; namespace State { // class Context; nicht hier class BaseState { public: void Handle(Context*); }; } class Context { public: bool stateChanged() { if (currentState) { currentState->Handle(this); } } private: State::BaseState* currentState; }; } }
-
Daran lags. Vielen Dank!!