状态模式 - c ++

时间:2015-04-20 09:39:40

标签: c++ design-patterns state

我正在尝试使用状态设计模式实现有限状态机,这对于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。也许你们可以帮助我正确设置这个并获得关联点,我很欣赏它。

1 个答案:

答案 0 :(得分:-2)

你可以使用C警卫。这意味着你在每个头文件中声明一些变量。

#ifndef STATE_H
#define STATE_H
your header
#endif

现在#ifndef和#endif之间的所有内容都会被包含两次,而ld将会返回错误。

在每个源文件中,您只需包含源所需的内容。