Xcode 中没有可行的重载“=”错误(Eclipse 未显示错误)
no viable overloaded '=' error in Xcode (Eclipse not showing errors)
我尝试使用 Cocos2dx 3.4 制作游戏并且在 Android 中一切正常(使用 Eclipse)所以我想在 Xcode 上尝试 iOS 看看它是否可以在那里工作 我将它导入 Xcode 但是当我尝试编译它时,我在 listener1->onTouchEnded = [=](Touch* touch, Event* event)
得到了这个错误 no viable overloaded '='
。
此代码来自 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);
我浏览了几页,人们遇到了类似的问题,但它没有解决我的 problem.Compiler 设置为 c++11 和 onTouchBegan 是 bool
其余的是 void
(我使用 pyhton 脚本制作了项目)。
这是我第一次使用 xCode 所以我可能忘记了什么。提前谢谢你
我发现明确指定 lambda 的 return 类型会有所帮助:
[=](Touch* touch, Event* event) -> void { ... }
这样编译器将帮助您摆脱其中的杂散 return 语句。您当前正在尝试将带有签名 bool(Touch*,Event*) 的 lambda 分配给 std::function<void(Touch*,Event*)>
.
尝试去掉这个 lambda 中的 return true
语句:
[=](Touch* touch, Event* event) { ... }
编译器会将您的 lambda 视为 bool
return 类型,而 onTouchEnded
不希望它成为 return bool
。如果您查看 Cocos2d 示例,该示例不会 return 任何东西(因此 lambda 是 void
类型)。简单地去掉你的 return true
语句,如果你想阻止其他分支的执行,使用 else if
s。
我尝试使用 Cocos2dx 3.4 制作游戏并且在 Android 中一切正常(使用 Eclipse)所以我想在 Xcode 上尝试 iOS 看看它是否可以在那里工作 我将它导入 Xcode 但是当我尝试编译它时,我在 listener1->onTouchEnded = [=](Touch* touch, Event* event)
得到了这个错误 no viable overloaded '='
。
此代码来自 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);
我浏览了几页,人们遇到了类似的问题,但它没有解决我的 problem.Compiler 设置为 c++11 和 onTouchBegan 是 bool
其余的是 void
(我使用 pyhton 脚本制作了项目)。
这是我第一次使用 xCode 所以我可能忘记了什么。提前谢谢你
我发现明确指定 lambda 的 return 类型会有所帮助:
[=](Touch* touch, Event* event) -> void { ... }
这样编译器将帮助您摆脱其中的杂散 return 语句。您当前正在尝试将带有签名 bool(Touch*,Event*) 的 lambda 分配给 std::function<void(Touch*,Event*)>
.
尝试去掉这个 lambda 中的 return true
语句:
[=](Touch* touch, Event* event) { ... }
编译器会将您的 lambda 视为 bool
return 类型,而 onTouchEnded
不希望它成为 return bool
。如果您查看 Cocos2d 示例,该示例不会 return 任何东西(因此 lambda 是 void
类型)。简单地去掉你的 return true
语句,如果你想阻止其他分支的执行,使用 else if
s。