我有一些奇怪的情况 我有对象将其'this'指针传递给其他对象 像这样:
void GameLayer::startGame()
{
m_pGameController = new GameController(this);
}
在GameController构造函数中的我使用GameLayer设置了memeber
GameController::GameController(GameLayer* gamelayer)
{
m_gamelayer = gamelayer;
}
在GameController中的我有使用回调函数的函数 像这样:
GameController::methodA()
{
CurrentGem->runAction(GameController::mycallbackMethod);
}
在回调函数中,我使用'this'访问GameController函数和成员 例如:
GameController::mycallbackMethod()
{
int test = this->age();
std::string name = this->name();
}
但问题是当我尝试访问m_pGameController时它给了我异常 说它的NULL指针
GameController::mycallbackMethod()
{
this->m_gamelayer->someGamelayerMethod();
}
错误是:
Access violation reading location 0xFFFFFFFF.
我做错了什么?
答案 0 :(得分:0)
传递回调函数时,请调用
CurrentGem->runAction(&GameController::mycallbackMethod);
mycallbackMethod应为static
。
答案 1 :(得分:-1)
CurrentGem->runAction(GameController::mycallbackMethod);
使函数mycallbackMethod
成为静态。
旁注:
要通过指针调用成员函数,您需要两件事:
指向对象的指针(或对象本身)
和指向函数的指针
因为指向成员函数的指针不保存函数的reall地址,而只是在对象内部进行偏移。但是static
成员函数没有this
指针,它与常规全局函数相同,除了它与其他类成员共享类的名称范围。所以在这种情况下,你不需要指向对象的指针来调用这样的回调。
您可以使用std::function
和std::bind
的功能,而不是使用静态方法并传递指向类实例的指针。