Ошибка указателя на функцию-член: должна быть вызвана ссылка на функцию-член non-stati c - PullRequest
0 голосов
/ 05 февраля 2020
this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),this, 0.0f, false);

Я получил ошибку: должна быть вызвана ссылка на функцию-член c.

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);

Я получил эту ошибку на XCode со стандартом c ++ 11 и библиотекой cococ2d-x ver4.0.

Обновление: Я попробовал этот код

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

Я получил ошибку Использование необъявленного идентификатора 'schedule_selector'

Update2 Я обнаружил проблему. Я создал этот класс через stati c метод createScene.

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

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Синтаксис SelectGameScene::startGameCallback недействителен. Он должен иметь &:

this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);
//                                   ^---- there
0 голосов
/ 06 февраля 2020

Компилятор XCode считает, что SelectGameScene :: startGameCallback является методом c, но это просто указатель на функцию-член. Поэтому я решил переписать это утверждение.

с

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)
...