C++ 回调函数指针
C++ Callback function pointer
我正在尝试在 Cocos2d-X 中创建回调函数。我有一个单身人士 class (AdsMgr)。在 AdsMgr 中,我想存储函数指针。我应该如何用传入的参数替换 callBackPauseResume?
AdsMgr.h
class AdsMgr
{
private:
static bool isAdsEnabled();
public:
static void(*callBackPauseResume)(int index);
static void initAds(void(*incallback)(int index));
}
AdsMgr.mm
void AdsMgr::initAds(void(*incallback)(int index))
{
callBackPauseResume = incallback;
// incallback(1);
}
MainScene.cpp
if(btn4 && btn4->getBoundingBox().containsPoint(location))
{
CCLOG("SHOW INTERSTITIAL");
AdsMgr::initAds(MainScene::pauseResumeDuringAds);
}
void MainScene::pauseResumeDuringAds(int inFlag)
{
switch (inFlag) {
case 0:
// Pause game
break;
case 1:
// Resume Game
break;
default:
break;
}
}
我无法编译并遇到以下错误:
Undefined symbols for architecture arm64:
"AdsMgr::callBackPauseResume", referenced from:
AdsMgr::initAds(void (*)(int)) in AdsMgr.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
根据你的编译错误判断,你还没有定义你的 callBackPauseResume
变量。这就是错误的意思。
除了它在class里面的声明,你还需要在class之外为它添加一个定义,在AdsMgr.mm
:
void (*AdsMgr::callBackPauseResume)(int) = nullptr;
我正在尝试在 Cocos2d-X 中创建回调函数。我有一个单身人士 class (AdsMgr)。在 AdsMgr 中,我想存储函数指针。我应该如何用传入的参数替换 callBackPauseResume?
AdsMgr.h
class AdsMgr
{
private:
static bool isAdsEnabled();
public:
static void(*callBackPauseResume)(int index);
static void initAds(void(*incallback)(int index));
}
AdsMgr.mm
void AdsMgr::initAds(void(*incallback)(int index))
{
callBackPauseResume = incallback;
// incallback(1);
}
MainScene.cpp
if(btn4 && btn4->getBoundingBox().containsPoint(location))
{
CCLOG("SHOW INTERSTITIAL");
AdsMgr::initAds(MainScene::pauseResumeDuringAds);
}
void MainScene::pauseResumeDuringAds(int inFlag)
{
switch (inFlag) {
case 0:
// Pause game
break;
case 1:
// Resume Game
break;
default:
break;
}
}
我无法编译并遇到以下错误:
Undefined symbols for architecture arm64:
"AdsMgr::callBackPauseResume", referenced from:
AdsMgr::initAds(void (*)(int)) in AdsMgr.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
根据你的编译错误判断,你还没有定义你的 callBackPauseResume
变量。这就是错误的意思。
除了它在class里面的声明,你还需要在class之外为它添加一个定义,在AdsMgr.mm
:
void (*AdsMgr::callBackPauseResume)(int) = nullptr;