this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),this, 0.0f, false);
Recibí un error: se debe llamar a la referencia a la función miembro no estática.
void startGameCallback(float dt); //in h file
void SelectGameScene::startGameCallback(float dt)
{
Director::getInstance()->replaceScene(TransitionFade::create(TRANSITION_TIME, GameScene::createScene()));
}
Dónde
#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
typedef void (Ref::*SEL_SCHEDULE)(float);
Recibí este error en XCode con c ++ 11 estándar y la biblioteca cococ2d-x ver4.0.
Actualización: probé este código
this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);
Recibí un error Uso del identificador no declarado 'schedule_selector'
Actualización2 Encontré el problema. Creé esta clase a través del método estático createScene.
class SelectGameScene : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
}
2 respuestas
El compilador XCode cree que SelectGameScene :: startGameCallback es un método estático, pero es solo un puntero de función miembro. Entonces decido reescribir esta declaración.
De
this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),0.0f);
Para
auto funPointer = static_cast<cocos2d::SEL_SCHEDULE>(&SelectGameScene::startGameCallback);
this->scheduleOnce(funPointer, 0.0f);
Porque
#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
La sintaxis SelectGameScene::startGameCallback
no es válida. Debe tener el &
:
this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);
// ^---- there
Nuevas preguntas
c++
C ++ es un lenguaje de programación de propósito general. Originalmente fue diseñado como una extensión de C, y tiene una sintaxis similar, pero ahora es un lenguaje completamente diferente. Use esta etiqueta para preguntas sobre el código (que se compilará) con un compilador de C ++. Utilice una etiqueta específica de la versión para preguntas relacionadas con una revisión estándar específica [C ++ 11], [C ++ 14], [C ++ 17] o [C ++ 20] etc.