c ++无法在回调函数中从'this'访问对象指针

时间:2013-09-01 10:29:16

标签: c++ pointers

我有一些奇怪的情况 我有对象将其'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.

我做错了什么?

2 个答案:

答案 0 :(得分:0)

传递回调函数时,请调用

CurrentGem->runAction(&GameController::mycallbackMethod);

mycallbackMethod应为static

答案 1 :(得分:-1)

CurrentGem->runAction(GameController::mycallbackMethod);

使函数mycallbackMethod成为静态。


旁注:

要通过指针调用成员函数,您需要两件事:

  • 指向对象的指针(或对象本身)

  • 和指向函数的指针

因为指向成员函数的指针不保存函数的reall地址,而只是在对象内部进行偏移。但是static成员函数没有this指针,它与常规全局函数相同,除了它与其他类成员共享类的名称范围。所以在这种情况下,你不需要指向对象的指针来调用这样的回调。

您可以使用std::functionstd::bind的功能,而不是使用静态方法并传递指向类实例的指针。