Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;错误:没有用于调用addtoucheventlistener的匹配成员函数_C++_Ios_Cocos2d X_Cocostudio - Fatal编程技术网

C++ C++;错误:没有用于调用addtoucheventlistener的匹配成员函数

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

我是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 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”)

Tks 4回答,我用另一个数字检查了CC_CALLBACK,但同样的错误:(你知道我的构造函数吗?void LoginScene::GameLoginTest(Ref*pSender,TouchEventType类型)对不起,我没有足够的15个声誉投票:p无论如何,Tks这么多p:)。享受C++;
#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));
        }
    }
}