【问题标题】:Member function pointer error: Reference to non-static member function must be called成员函数指针错误:必须调用非静态成员函数的引用
【发布时间】:2020-02-05 16:18:13
【问题描述】:
this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),this, 0.0f, false);

我收到一个错误:必须调用对非静态成员函数的引用。

void startGameCallback(float dt); //in h file

void SelectGameScene::startGameCallback(float dt)
{
    Director::getInstance()->replaceScene(TransitionFade::create(TRANSITION_TIME,     GameScene::createScene()));
}

在哪里

#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
typedef void (Ref::*SEL_SCHEDULE)(float);

我在使用 c++11 标准和 cococ2d-x ver4.0 库的 XCode 上遇到此错误。

更新:我试过这段代码

this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);

我收到错误使用未声明的标识符“schedule_selector”

Update2 我发现了问题。我通过静态方法 createScene 创建了这个类。

class SelectGameScene : public cocos2d::Layer
{
 public:
   static cocos2d::Scene* createScene();
 }

【问题讨论】:

    标签: c++ xcode c++11 cocos2d-x


    【解决方案1】:

    语法SelectGameScene::startGameCallback 无效。它必须有&amp;:

    this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);
    //                                   ^---- there
    

    【讨论】:

    • 可能是 XCode 设置错误或其他原因,因为我们使用不带 & 的 SelectGameScene::startGameCallback。 github.com/cocos2d/cocos2d-x/…
    • @Voloda2 如果您使用添加&amp; 的宏,当然可以。否则,它是非标准的,可能会像您问题中的代码一样失败。通常,如果您禁用扩展,编译器将不允许这样做。
    • 我通过静态方法创建了我的对象。这就是问题所在。
    【解决方案2】:

    XCode 编译器认为 SelectGameScene::startGameCallback 是静态方法,但它只是一个成员函数指针。所以我决定重写这句话。

    来自

    this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),0.0f);
    

    auto funPointer = static_cast<cocos2d::SEL_SCHEDULE>(&SelectGameScene::startGameCallback);
    this->scheduleOnce(funPointer, 0.0f);
    

    因为

    #define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多