Я попытался реализовать очень простой FSM на C ++. Проблема в том, что эта программа завершит работу сразу после выполнения. Я новичок в 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();
}
Hey_state *h;
Это создает указатель на Hey_state
который может указывать в любом месте случайно в памяти. Ни один объект на самом деле не создан.
Stranger s(h);
s.greet();
Это пытается использовать Hey_state, который никогда не создавался, выдавая ошибку.
Пытаться:
Hey_state h;
Stranger s(&h);
s.greet();
Это создает объект Hey_state
и передает указатель на этот объект Stranger s
Hey_state *h
это указатель
Где это указывает? Вы не знаете
Его ценность неинициализированным.
Позже ты разыменовать тот же указатель, теперь скопирован в currState
,
currState->update();
Что здесь? Вы не знаете
Вы разыменовываете неинициализированный указатель.