首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++错误没有匹配的成员函数来调用addtoucheventlistener

C++错误没有匹配的成员函数来调用addtoucheventlistener
EN

Stack Overflow用户
提问于 2014-08-15 12:45:00
回答 2查看 1.9K关注 0票数 2

我是新来的cocos2d-x。我在这一行中遇到错误:

代码语言:javascript
复制
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.h

代码语言:javascript
复制
#include "cocos2d.h"
#include "cocos-ext.h"
#include "CocosGUI.h"

USING_NS_CC;
USING_NS_CC_EXT;

using namespace ui;

class LoginScene : public Scene
{
public:
    LoginScene(bool pPortrait=false);
    ~LoginScene();
    // there's no 'id' in cpp, so we recommend returning the class instance pointer
    //static cocos2d::Scene* createScene();

    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    //virtual bool init();

    virtual void onEnter();
    virtual void onExit();

    // a selector callback
    virtual void GameLogin();
    void GameLoginTest(Ref* pSender,TouchEventType type);
    //virtual void runThisTest()=0;
protected:

    Layer* m_pUILayer;
    Layout* m_pLayout;
    int authenticate();
    //int authenticate(const char* username, const char* password);
    // implement the "static create()" method manually
    //CREATE_FUNC(LoginScene);
};

文件LoginScene.cpp

代码语言:javascript
复制
#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));
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-08-15 14:11:13

对于LoginScene::GameLoginTest,也许你可以使用CC_CALLBACK_2,像这样: btnRegister->addTouchEventListener(CC_CALLBACK_2(LoginScene::GameLoginTest,this));

票数 0
EN

Stack Overflow用户

发布于 2014-08-15 19:10:50

您要发送的functor的原型是

(登录场景*,引用*,TouchEventType)

由于此方法不是静态方法,因此它有一个隐式参数,称为“LoginTest”。

您有两个选择:

使函数

  • 将原型更改为TouchEventType (我相信Ref*的意思是“this”)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25321375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档