【发布时间】:2019-02-07 02:46:14
【问题描述】:
我正在创建一个允许您将状态添加到堆栈中的状态机。以下是它包含的几个方法:
void pushState(State* state);
State* getCurrentState();
State 只是一个用于创建派生类的基类。所以我创建了一个名为GameState 的派生类,它有一个名为foo 的独特方法。如果我执行以下操作,它不会让我访问 foo,因为“类 State 不存在名为 'foo' 的方法。
State* currentState = myStateMachine.getCurrentState();
我也尝试将State* 更改为GameState*,但它不起作用,因为getCurrentState() 返回类型State。当我实际上不知道当前的派生状态是什么时,如何获取堆栈上的当前状态?
我也不知道为什么它允许我将GameState 推送到期待State 的堆栈上,但不允许我将它作为GameState 检索。相反,它让我在State 检索它。
【问题讨论】:
-
你如何从
State导出GameState?您是否使用了virtual关键字? -
@thb 我刚刚做了
class GameState : public State -
您是否在 C++ 书籍中阅读过如何创建虚函数?
-
创建一个 MCVE (stackoverflow.com/help/mcve) 以便我们可以真正看到您编写的代码,而不是从您的描述中猜测。