Простой сбой программы

Я попытался реализовать очень простой 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();
}

-1

Решение

Hey_state *h;

Это создает указатель на Hey_state который может указывать в любом месте случайно в памяти. Ни один объект на самом деле не создан.

Stranger s(h);
s.greet();

Это пытается использовать Hey_state, который никогда не создавался, выдавая ошибку.

Пытаться:

Hey_state h;
Stranger s(&h);
s.greet();

Это создает объект Hey_stateи передает указатель на этот объект Stranger s

3

Другие решения

Hey_state *h это указатель

Где это указывает? Вы не знаете

Его ценность неинициализированным.

Позже ты разыменовать тот же указатель, теперь скопирован в currState,

        currState->update();

Что здесь? Вы не знаете

Вы разыменовываете неинициализированный указатель.

5

По вопросам рекламы [email protected]