C++ C++;错误:没有用于调用addtoucheventlistener的匹配成员函数
我是cocos2d-x的新手。我在这行中遇到了错误:C++ C++;错误:没有用于调用addtoucheventlistener的匹配成员函数,c++,ios,cocos2d-x,cocostudio,C++,Ios,Cocos2d X,Cocostudio,我是cocos2d-x的新手。我在这行中遇到了错误: Button* btnRegister=static_cast<Button*>(Helper::seekWidgetByName(m_pLayout, "btnRegister")); btnRegister->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLoginTest, this));//get error no matching member functi
Button* btnRegister=static_cast<Button*>(Helper::seekWidgetByName(m_pLayout, "btnRegister"));
btnRegister->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLoginTest, this));//get error no matching member function for call to addtoucheventlistener
文件LoginScene.cpp
#include "LoginScene.h"
#include "cocostudio/CCSSceneReader.h"
#include "cocostudio/CCSGUIReader.h"
#include "cocostudio/CCActionManagerEx.h"
#include "LoadingScene.h"
#include "MainScene.h"
#include "curl/curl.h"
LoginScene::LoginScene(bool pPortrait):m_pUILayer(NULL),m_pLayout(NULL)
{
Scene::init();
}
LoginScene::~LoginScene()
{
}
void LoginScene::onEnter()
{
Scene::onEnter();
m_pUILayer=Layer::create();
m_pUILayer->scheduleUpdate();
this->addChild(m_pUILayer);
m_pLayout=dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("LoginScene.json"));
m_pUILayer->addChild(m_pLayout);
Button* btnLogin = static_cast<Button*>(Helper::seekWidgetByName(m_pLayout, "btnLogin"));
btnLogin->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLogin, this));//it's okay
Button* btnRegister=static_cast<Button*>(Helper::seekWidgetByName(m_pLayout, "btnRegister"));
btnRegister->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLoginTest, this));
//get error no matching member function for call to addtoucheventlistener
}
void LoginScene::GameLogin()
{
auto scene=LoadingScene::createScene();
Director::getInstance()->pushScene(scene);
}
void LoginScene::GameLoginTest(Ref* pSender,TouchEventType type)
{
if (type==TOUCH_EVENT_ENDED)
{
if (authenticate()==1)
{
auto scene=MainScene::createScene();
Director::getInstance()->pushScene(TransitionFade::create(2.3f, scene));
}
}
}
#包括“LoginScene.h”
#包括“cocostudio/CCSSceneReader.h”
#包括“cocostudio/CCSGUIReader.h”
#包括“cocostudio/CCActionManagerEx.h”
#包括“LoadingScene.h”
#包括“mainsecene.h”
#包括“curl/curl.h”
LoginScene::LoginScene(boolpportrait):m_pUILayer(NULL),m_pLayout(NULL)
{
场景::init();
}
LoginScene::~LoginScene()
{
}
void LoginScene::onEnter()
{
场景::onEnter();
m_pUILayer=图层::创建();
m_pUILayer->scheduleUpdate();
这->addChild(m_pUILayer);
m_pLayout=dynamic_cast(cocostudio::GUIReader::getInstance()->widgetFromJsonFile(“LoginScene.json”);
m_pUILayer->addChild(m_播放);
按钮*btnLogin=static_cast(助手::seekWidgetByName(m_播放,“btnLogin”);
btnLogin->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLogin,this));//没关系
按钮*btnRegister=static_cast(Helper::seekWidgetByName(m_pLayout,“btnRegister”);
btnRegister->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLoginTest,this));
//获取错误:没有匹配的成员函数用于调用addtoucheventlistener
}
void LoginScene::GameLogin()
{
自动场景=加载场景::创建场景();
Director::getInstance()->pushScene(场景);
}
void LoginScene::GameLoginTest(Ref*pSender,TouchEventType)
{
如果(类型==触摸事件结束)
{
如果(authenticate()==1)
{
自动场景=主场景::CreateSecene();
Director::getInstance()->pushScene(TransitionFade::create(2.3f,场景));
}
}
}
对于LoginScene::GameLoginTest,也许您可以使用CC_回调_2,如下所示:
btnRegister->addTouchEventListener(CC_CALLBACK_2(LoginScene::GameLoginTest,this)) 您要发送的函子的原型是 (LoginScene*,Ref*,TouchEventType) 由于LoginTest不是静态方法,因此它有一个名为“this”的隐式参数 您有两个选择:
- 使函数为静态
- 将原型更改为TouchEventType(我相信Ref*就是“this”)
#include "LoginScene.h"
#include "cocostudio/CCSSceneReader.h"
#include "cocostudio/CCSGUIReader.h"
#include "cocostudio/CCActionManagerEx.h"
#include "LoadingScene.h"
#include "MainScene.h"
#include "curl/curl.h"
LoginScene::LoginScene(bool pPortrait):m_pUILayer(NULL),m_pLayout(NULL)
{
Scene::init();
}
LoginScene::~LoginScene()
{
}
void LoginScene::onEnter()
{
Scene::onEnter();
m_pUILayer=Layer::create();
m_pUILayer->scheduleUpdate();
this->addChild(m_pUILayer);
m_pLayout=dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("LoginScene.json"));
m_pUILayer->addChild(m_pLayout);
Button* btnLogin = static_cast<Button*>(Helper::seekWidgetByName(m_pLayout, "btnLogin"));
btnLogin->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLogin, this));//it's okay
Button* btnRegister=static_cast<Button*>(Helper::seekWidgetByName(m_pLayout, "btnRegister"));
btnRegister->addTouchEventListener(CC_CALLBACK_0(LoginScene::GameLoginTest, this));
//get error no matching member function for call to addtoucheventlistener
}
void LoginScene::GameLogin()
{
auto scene=LoadingScene::createScene();
Director::getInstance()->pushScene(scene);
}
void LoginScene::GameLoginTest(Ref* pSender,TouchEventType type)
{
if (type==TOUCH_EVENT_ENDED)
{
if (authenticate()==1)
{
auto scene=MainScene::createScene();
Director::getInstance()->pushScene(TransitionFade::create(2.3f, scene));
}
}
}