Я пытаюсь реализовать конечный автомат с шаблоном проектирования состояний, я очень новичок в С++ и начинающий программист в целом. include и заголовочные файлы меня смущают, и я не совсем уверен, как правильно настроить этот проект. Я, вероятно, должен начать с чего-то другого, но у меня действительно нет выбора.
Цель машины — прочитать символ и, в зависимости от состояния, сделать что-то другое.
Это макет класса, о котором я думал:
Machine.h
class Machine{
void setCurrentState(State s);
State currentState;
}
State.h
class State{
virtual void read(char c, Machine* m) = 0;
}
(Should i make a header file for each derived class?)
Initial.h
class Initial: public State{
void read(char c, Machine* m){
m->setCurrentState(new SomeState());
}
}
Я пытался сделать это таким образом, но я не понимаю, что и где я должен включать. Я получаю, в зависимости от того, как я делаю это неправильно, ошибки от не определенного типа до неопределенной ссылки vtable. Может быть, вы, ребята, могли бы помочь мне настроить это правильно и получить ссылку на точку, я очень ценю это.
State currentState;
должно бытьState* currentState;
. - person πάντα ῥεῖ   schedule 20.04.2015State
вам достаточно необработанных данных илиstd::weak_ptr
, поскольку эти классы должны обеспечивать просто другое поведение, но не должны сами хранить данные. - person πάντα ῥεῖ   schedule 20.04.2015using State = uint8_t; struct Result { char output; State state }; Result myStateMachine( State state, char input) { switch(state) { ... } ...}
- person BitTickler   schedule 23.03.2020