我尝试在C ++中实现一个非常简单的FSM。问题是,该程序在执行后会立即崩溃。我是C ++的新手,所以我在这里找不到任何错误。有人可以帮忙吗?提前谢谢!
#include <iostream>
using namespace std;
class State {
public:
virtual ~State() {}
virtual void update();
};
class Hey_state : public State {
public:
virtual void update() { cout << "Hey!\n";}
};
class How_state : public State {
public:
virtual void update() { cout << "How are you?\n";}
};
class Stranger {
public:
Stranger(State *startState)
: currState(startState) {}
void greet() {
currState->update();
}
void setState(State *s) {currState = s;}
private:
State *currState;
};
int main() {
Hey_state *h;
Stranger s(h);
s.greet();
}
答案 0 :(得分:5)
Hey_state *h
是指针。
它指向哪里? 你不知道。
其值为未初始化。
稍后,您取消引用相同的指针,现在已复制到currState
。
currState->update();
有什么? 你不知道。
您正在取消引用未初始化的指针。
答案 1 :(得分:3)
Hey_state *h;
这会创建一个指向Hey_state
的指针,它可以指向内存中的任意位置。实际上没有创建任何对象。
Stranger s(h);
s.greet();
这会尝试使用从未创建的Hey_state,从而产生错误。
尝试:
Hey_state h;
Stranger s(&h);
s.greet();
创建Hey_state
的对象,并将指向该对象的指针传递给Stranger s