c++有限状态机
c++ Finite State Machine
我收到了一份作业,我似乎无法理解。我们的老师要我们编写一个有限状态机的程序。这是代码
#ifndefine
#define FINITE_STATE_MACHINE_H
#include <iosfwd>
class FiniteStateMachine
{
Private:
friend std::ostream &operator<< (std::ostream &, FiniteStateMachine const &);
public:
FiniteStateMachine(){}
virtual FiniteStateMachine *changeState() const = 0;
virtual char const *toString() const = 0;
virtual ~FiniteStateMachine(){}
};
class ON : public FiniteStateMachine
{
private:
public:
ON(){}
FiniteStateMachine *changeState() const;
char const *toString() const;
};
class OFF : public FiniteStateMachine
{
private:
public:
OFF(){ }
FiniteStateMachine *changeState() const;
char const *toString() const;
};
#endif
说明是创建一个包含所有相关成员函数的FiniteStateMachine.cpp文件,以便OFF状态转换为ON状态,反之亦然。
我曾试图编写changeState()函数来返回相反状态的新实例,但它似乎不起作用,我也不确定哪里出了问题。
我试图在FiniteStateMachine.cpp 中实例化并返回一个新的ON对象
FiniteStateMachine *OFF::changeState() const
{
FiniteStateMachine *on = new ON;
return *on;
}
编译器返回以下错误无法在返回中将"FiniteStateMachine"转换为"FiniteStateMachine*">
一位同学建议将其放入构造函数中,而不是简单地调用changeState()
OFF::OFF()
{
FiniteStateMachine *OFF::changeState() const
{
FiniteStateMachine *on = new ON;
return *on;
}
}
编译器返回错误"("标记之前的声明中的限定id
表示它处于changeState和()的之间
在更多的键盘敲击之后,我似乎需要写
FiniteStateMachine *OFF::changeState() const
{
return new OFF();
}
尝试查找"状态模式"。例如https://sourcemaking.com/design_patterns/state
这种设计模式是为了解决您的需求。
相关文章:
- 如何在使用 Boost MSM 编写的状态机中直接访问任何状态
- 启动状态机无法在启动时处理内部转换
- 实现C++状态机.如何解决Wpmf对流警告
- 无法使用模板参数编译提升元状态机
- Boost状态机语言-"操作"中的"发布"事件
- 将C++数据模型与Qt SCXML状态机一起使用
- 如何在 boost::msm 中实现可以访问状态机 (SM) 的后端/前端的"BaseState"
- 分层状态机涉及哪些原则,以及如何实现基本模型?
- 如何在状态内创建状态机?
- 状态机与开关情况
- C++状态机,继承了具有语法不正确的成员值的类
- c++有限状态机
- CXX 库,用于具有运行时操作的有限状态机/自动机
- QTSCXML状态机中的事件处理
- 如何将有限状态机集成到我的应用程序中
- 接收访问无线介质到有限状态机的伪代码
- 一个尝试非确定性有限状态机(c++),是静态std::map的好主意
- 有限状态机与ID3决策树
- 嵌入式设备的有限状态机
- 在C++中实现有限状态机的最佳方法是什么