c++状态模式异常
C++ State pattern exception
我是c++新手!请帮助我实现国家模式。
我有下面的代码,但它不能编译:
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'
虚函数未实现
这段代码工作得很好:
class MasterThreadState;
class Init; //class Idle;
class MasterThread
{
public:
MasterThread();
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) = 0;
protected:
void goTo(MasterThread& m, MasterThreadState* newState){
m.goTo(newState);
}
};
class Init : MasterThreadState {
public:
static MasterThreadState* State();
virtual void recieved(MasterThread& master, int tag);
private:
Init(){}
};
class Idle : MasterThreadState {
public:
static MasterThreadState* State();
virtual void recieved(MasterThread& master,int tag);
private:
static Idle instance;
};
如果在Init声明之后移动MasterThread构造函数,代码将编译(和构建):
class MasterThread
{
public:
MasterThread();
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;
};
Init Init::instance;
MasterThread::MasterThread() {
_state = Init::State();
}
注意,Init::State()应该返回指针MasterThreadState*
。这也被改变了,定义了静态成员Init::instance,并添加了虚函数的实现(空)以正确链接。
相关文章:
- 处理多个异常集合的C++方法
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- boost::create_directory 在发布模式下返回异常
- 执行视觉工作室异常处理模式
- 在发布模式下使用 VS2017 在C++发布模式下构建的应用不会在未经处理的异常时中断
- 在Visual Studio C 调试模式中捕获异常的最佳方法仅在从IDE运行时才会发生
- 异常安全 - 用于可靠回滚对象状态的模式
- 仅在发布模式下使用 glGenBuffer 的未处理异常 - QT
- 如何分析VS2010在调试模式下捕获的未处理异常
- 在成功运行10小时后,在发布模式下从windows应用程序中获得异常,如何检测出问题
- 在调试模式下未处理的异常,但在发布中工作正常
- FFMPEG异常仅在调试模式下
- 发布模式下的异常,而不是调试模式下的异常
- 从混合模式c++项目中的CLR-to-SEH异常中获取明智的信息
- 在阻塞模式下使用TServerSocket时,如何处理异常?
- libpqxx在DEBUG模式下抛出异常
- c++状态模式异常
- Poco是否有自己的附加异常类或模式