我正在尝试使用状态设计模式实现有限状态机,这对于c ++和一般的初学程序员来说是非常新的。包含和头文件混淆了我,我不太清楚如何正确设置这个项目。我可能应该从别的东西开始,但我真的没有选择。
该机器的目标是读取一个字符,并根据状态,做一些不同的事情。
这是我想到的班级布局:
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。也许你们可以帮助我正确设置这个并获得关联点,我很欣赏它。
答案 0 :(得分:-2)
你可以使用C警卫。这意味着你在每个头文件中声明一些变量。
#ifndef STATE_H
#define STATE_H
your header
#endif
现在#ifndef和#endif之间的所有内容都会被包含两次,而ld将会返回错误。
在每个源文件中,您只需包含源所需的内容。