好吧,这很奇怪……我想。我对标题的意思是:
在 actionHandler 对象的 act() 函数中,我有:
state->getHumanPieces();
这给了我某种地址违规,显然'this'没有初始化'state'变量......碰巧这个actionHandler类有一个静态变量,它是一个指向自身实例的指针,称为'handler '...如果我这样做:
handler->state->getHumanPieces();
它完美地工作..为了使这一点更加清晰:
那个“处理程序”指针指向整个程序中存在的唯一 actionHandler 实例(单例模式)。所以基本上当我从我的 actionHandler 对象运行这个 act() 函数时,它不允许我访问“状态”变量,但是如果从那个对象,我尝试通过指向同一个对象的指针访问同一个变量,可以吗?我不明白发生了什么..我不确定它是否清楚,可能有点令人困惑,但我希望它是可以理解的..
顺便说一句,VS08 调试器显示了我的意思:
this: 0x000000 {state=???}
handler: someAddress {state= someAddress}
handler:...
state:...
state: CXX0030: ERROR: expression cannot be evaluated
我希望它更清楚,它是显示在显示变量当前值的小窗口上的小树结构(自动)。
编辑:我知道这个指针是空的,我只是不明白它怎么可能是空的。我会发布一些代码:
actionHandler.h:
class gameState;
class actionHandler
{
public:
static actionHandler* Instance(){return handler;}
void act(int,int);
private:
actionHandler();
static actionHandler* handler;
gameState *state;
};
actionHandler.cpp:
actionHandler* actionHandler::handler = new actionHandler();
actionHandler::actionHandler()
{
state = gameState::Instance();
}
void actionHandler::act(int x, int y)
{
state->getHumanPieces();
}
现在,在 gameState.hi 中有一个类似的结构(单例)和一个 actionHandler* 私有变量,它在以下位置初始化:
gameState::gameState()
{
handler = actionHandler::Instance();
}
还有一个返回处理程序的 getHandler() 函数。这一切都应该在 main.cpp 中初始化:
gameState *currState = gameState::Instance();
actionHandler *handler = currState->getHandler();
然后使用:
handler->act(event->button.x,event->button.y);
main.cpp 是用简单的 .c 样式编写的,没有标题,所以是的,我想调用处理程序的函数是静态的......但是,我也调用了 gameState* 指针,它的工作方式应该与actionHandler* 一个.. 希望这能让它更清楚。