C++ 回调函数指针

标签 c++ ios objective-c cocos2d-x objective-c++

我正在尝试在 Cocos2d-X 中创建一个回调函数。我有一个单例类 (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 变量。这就是错误的意思。

除了它在类内的声明外,你还需要在类外为它添加一个定义,在AdsMgr.mm中:

void (*AdsMgr::callBackPauseResume)(int) = nullptr;

关于C++ 回调函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29761969/

相关文章:

ios - 如何在 SwiftUI 中更改步进图标前景色?

ios - 尝试在 XCode 中提交对应用程序的更新,但我不断收到错误消息……

objective-c - cocoa :两点之间的 "Random"线?

ios - ALAsset 指针在访问时抛出 EXC_BAD_ACCESS

model-view-controller - 以编程方式切换 MVC View Controller - iOS

ios - 如何在标签中写多行

c++ - igraph 中的直接选择器

c++ - 查找 x 轴上最大非重叠线数的算法

c++ - 无法将 'std::basic_istream<char>' 左值绑定(bind)到 'std::basic_istream<char>&&'

c++ - 我可以在没有 Objective C(仅 C 或 C++)的情况下使用 CoreMIDI 吗?