C++ 没有可行的过载'=';Xcode中出错(Eclipse未显示错误)

C++ 没有可行的过载'=';Xcode中出错(Eclipse未显示错误),c++,xcode,c++11,cocos2d-x,C++,Xcode,C++11,Cocos2d X,我曾尝试使用Cocos2dx 3.4制作一个游戏,并且在Android(使用Eclipse)中一切正常,所以我想在Xcode for iOS上试用它,看看它是否能在那里工作。我将它导入到Xcode中,但当我尝试编译它时,我在listener1->OnTouched=[=]处遇到了这个错误(触摸*触摸,事件*事件) 此代码来自Cocos2d wiki EventDispatcher\u机制 我的代码: auto listener1 = EventListenerTouchOneByOne::cr

我曾尝试使用Cocos2dx 3.4制作一个游戏,并且在Android(使用Eclipse)中一切正常,所以我想在Xcode for iOS上试用它,看看它是否能在那里工作。我将它导入到Xcode中,但当我尝试编译它时,我在
listener1->OnTouched=[=]处遇到了这个错误(触摸*触摸,事件*事件)

此代码来自Cocos2d wiki EventDispatcher\u机制

我的代码:

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);
auto listener1=EventListenerTouchOneByOne::create();
listener1->SetWallowTouchs(真);
listener1->OnTouchBegined=[](触摸*触摸,事件*事件){
自动目标=static_cast(事件->getCurrentTarget());
Point locationInNode=目标->转换节点空间(触摸->获取位置());
大小s=target->getContentSize();
Rect Rect=Rect(0,0,s.宽度,s.高度);
if(矩形容器点(位置Innode))
{
目标->设置不透明度(180);
返回true;
}
返回false;
};
listener1->OnTouched=[=](触摸*触摸,事件*事件){
自动目标=static_cast(事件->getCurrentTarget());
目标->设置不透明度(255);
如果(目标==abc)
{
自动场景AC=ABCfirst::CreateSecene(静音);
Director::getInstance()->ReplaceSecene(sceneABC);
返回true;
}
如果(目标==n123)
{
自动场景数=数字::创建场景(静音);
Director::getInstance()->ReplaceSecene(场景数);
返回true;
}
如果(目标==lgame)
{
auto scenePWL=PWL::CreateSecene(静音);
Director::getInstance()->ReplaceSecene(scenePWL);
返回true;
}
如果(目标==ngame)
{
auto scenepn=PWN::createScene(静音);
Director::getInstance()->ReplaceSecene(scenePWN);
返回true;
}
如果(目标==信息)
{
auto sceneAbout=About::createScene();
Director::getInstance()->ReplaceSecene(sceneAbout);
返回true;
}
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,abc);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
n123);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
lgame);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
(加梅);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
信息);
我浏览了几页,其中有人遇到了类似的问题,但这并没有解决我的问题。编译器设置为c++11,OnTouchis
bool
restare
void
(我用pyhton脚本制作了这个项目)


这是我第一次使用xCode,所以可能是我忘了什么。提前谢谢你

我发现显式指定lambda的返回类型很有帮助:

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

通过这种方式,编译器将帮助您消除其中的错误返回语句。您当前正在尝试将带有签名bool(Touch*,Event*)的lambda分配给
std::function

尝试消除此lambda中的
return true
语句:

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

编译器会将lambda视为具有
bool
返回类型,而
ontouched
不希望它返回
bool
。如果查看Cocos2d示例,该示例不会返回任何内容(因此lambda是
void
类型)。只要去掉你的
return true
语句,如果你想阻止其他分支执行,就使用
else if
s。

你说得对,但他是第一个,所以我给了他解决方案,但感谢你的澄清,我真的同意。