Я новичок в С++! Пожалуйста, помогите мне реализовать шаблон состояния.
У меня есть код ниже, но он не компилируется:
class MasterThreadState;
class Init; class Idle;
class MasterThread
{
public:
MasterThread(){
_state = Init::State();
}
void handle(int sender, int tag);
private:
int _sender;
MasterThreadState* _state;
private:
friend class MasterThreadState;
void goTo(MasterThreadState* newState){ _state = newState; }
};
class MasterThreadState
{
public:
virtual void recieved(MasterThread& master, int tag);
protected:
void goTo(MasterThread& m, MasterThreadState* newState){
m.goTo(newState);
}
};
class Init : MasterThreadState {
public:
static MasterThreadState& State() { return instance; }
virtual void recieved(MasterThread& master, int tag);
private:
static Init instance;
};
class Idle : MasterThreadState {
public:
void recieved(MasterThread& master,int tag);
static MasterThreadState& State(){ return instance; }
private:
static Idle instance;
};
Ошибка:
неполный тип 'Init', используемый во вложенном спецификаторе имени _state = Init::State();
Init
только с предварительным объявлением, которое будет возвращено по значению, вместо этого используйте указатель или ссылку. Вы все равно не хотите иметь копию состояния. - person πάντα ῥεῖ   schedule 06.08.2015MasterThread::MasterThread
после определенияInit
. - person Jarod42   schedule 06.08.2015