Xcode中没有可行的重载'='错误(Eclipse没有显示错误)

时间:2015-03-19 06:48:28

标签: c++ xcode c++11 cocos2d-x

我曾尝试使用Cocos2dx 3.4制作游戏,并且一切正常在Android中使用(使用Eclipse)所以我想尝试在Xcode for iOS上看看它是否可以在那里工作我将它导入Xcode但是当我尝试编译它我在no viable overloaded '='收到此错误listener1->onTouchEnded = [=](Touch* touch, Event* event)

此代码来自Cocos2d wiki EventDispatcher_Mechanism http://www.cocos2d-x.org/wiki/EventDispatcher_Mechanism

我的代码:

auto listener1 = EventListenerTouchOneByOne::create();

listener1->setSwallowTouches(true);


listener1->onTouchBegan = [](Touch* touch, Event* event) {  
        auto target = static_cast<Sprite*>(event->getCurrentTarget());
        Point locationInNode = target->convertToNodeSpace(touch->getLocation());
        Size s = target->getContentSize();
        Rect rect = Rect(0, 0, s.width, s.height);


        if (rect.containsPoint(locationInNode))
        {

            target->setOpacity(180);
            return true;
        }
        return false;
    };



listener1->onTouchEnded = [=](Touch* touch, Event* event) {
    auto target = static_cast<Sprite*>(event->getCurrentTarget());

    target->setOpacity(255);

        if (target == abc)
        {
            auto sceneABC = ABCfirst::createScene(mute);
            Director::getInstance()->replaceScene(sceneABC);
            return true;
        }

        if (target == n123)
        {
            auto sceneNumbers = Numbers::createScene(mute);
            Director::getInstance()->replaceScene(sceneNumbers);
            return true;
        }

        if (target == lgame)
        {
            auto scenePWL = PWL::createScene(mute);
            Director::getInstance()->replaceScene(scenePWL);
            return true;
        }

        if (target == ngame)
        {
            auto scenePWN = PWN::createScene(mute);
            Director::getInstance()->replaceScene(scenePWN);
            return true;
        }

        if (target == info)
        {
            auto sceneAbout = About::createScene();
            Director::getInstance()->replaceScene(sceneAbout);
            return true;
        }



    };

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, abc);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
        n123);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
        lgame);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
        ngame);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
            info);

我走了几页,人们有类似的问题,但它没有解决我的问题。编译器设置为c ++ 11,onTouchBegan是bool休息是void(我做了项目用pyhton脚本)。

这是我第一次使用xCode,所以可能会忘记一些东西。提前谢谢

2 个答案:

答案 0 :(得分:1)

我发现明确指定lambda的返回类型有帮助:

[=](Touch* touch, Event* event) -> void { ... }

这样编译器将帮助你摆脱那里的迷路返回语句。您当前正在尝试将带有签名bool(Touch *,Event *)的lambda分配给std::function<void(Touch*,Event*)>

答案 1 :(得分:1)

尝试摆脱这个lambda中的return true语句:

[=](Touch* touch, Event* event) { ... }

编译器会将lambda视为具有bool返回类型,而onTouchEnded不会指望它返回bool。如果你看一下Cocos2d的例子,那个人不会返回任何东西(因此lambda是void类型)。只需删除return true语句,如果要阻止其他分支执行,请使用else if