我使用Cocos2D-X,给出以下代码片段:
CCSwipeGestureRecognizer * swipe = CCSwipeGestureRecognizer::create();
swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe));
swipe->setDirection(kSwipeGestureRecognizerDirectionRight | kSwipeGestureRecognizerDirectionLeft);
swipe->setCancelsTouchesInView(true);
this->addChild(swipe);
我将提供的CPP和H文件复制到我给出的文件上,然后将它们添加到目标中。但是,出于某种原因......这一行:
swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe));
给了我一些问题。我甚至无法弄清楚它在问我什么 - 更不用说要链接什么了。标题包含并编译。
Undefined symbols for architecture armv7:
"GameplayScene::didSwipe(cocos2d::CCObject*)", referenced from:
GameplayScene::init() in GameplayScene.o
ld: symbol(s) not found for architecture armv7
注释掉setTarget行可以使一切正常。
答案 0 :(得分:1)
这里的简单答案是函数未正确定义。它被定义为:
void didSwipe(CCObject* obj)
{
exit(0);
}
应该是:
void GameplayScene::didSwipe(CCObject* obj)
{
exit(0);
}
也就是说,类的成员函数的实现而不仅仅是文件中的一个函数。
但我想强调一下,虽然这可能是确切问题的答案,但我认为这不是解决这个问题的原因。
某些编辑可能会因为主题而进入并清除它,但无论如何我都会把它放进去......
假设:
作者在看到这段代码之前确实已经看了一段时间(我正和他聊天......因为看起来至少还有一个人在我面前......在它被发现之前)。 / p>
作者在评论中发布了API,问题仍然不明显。
所有讨论和看过这个问题的人都是(合理地)健全的思想,身体,并且至少有一个基本的理解,你实际上必须告诉编译器一个函数是类函数的实现而不只是一个“功能”。
我认为这个问题的真正答案是:
午夜后不要尝试编写代码......除非你天生就是夜间活动。
不要试图帮助人们在午夜之后调试他们的代码......除非你是天生的夜间活动。
如果问题在您看了一个多小时后在解决方案中显得不明显,请离开并稍后再回来。
不要在午夜之后喂养开发者,否则他们可能会变坏。
是的,我们都破坏了这些规则。