-2

我有一些奇怪的场景,我有对象传递给其他对象,它的“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.

我究竟做错了什么 ?

4

2 回答 2

0

传递回调函数时,请调用

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

mycallbackMethod 应该在哪里static

于 2013-09-01T10:36:46.230 回答
-1
CurrentGem->runAction(GameController::mycallbackMethod);

使函数mycallbackMethod静态。


边注:

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

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

  • 和一个指向函数的指针

因为指向成员函数的指针不保存函数的真实地址,而只保存对象内部的偏移量。然而,static成员函数没有this指针,它与常规全局函数相同,只是它与其他类成员共享类的名称范围。因此,在这种情况下,您不需要指向对象的指针来调用此类回调。

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

于 2013-09-01T10:44:50.207 回答