我正在使用 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));
给我带来了问题。我什至不知道它在问我什么——更不用说要链接什么了。包含并编译了 header 。
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 行使一切正常。
最佳答案
这里的简单答案是函数没有正确定义。它被定义为:
void didSwipe(CCObject* obj)
{
exit(0);
}
应该是:
void GameplayScene::didSwipe(CCObject* obj)
{
exit(0);
}
也就是说,类的成员函数的实现而不仅仅是文件中的一个函数。
但是,我想强调这一点,虽然这可能是确切问题的答案,但我不认为这是问题原因的答案。
某些好心的编辑可能会因为偏离主题而将其清除,但无论如何我都会将其放入...
给定:
在看到这段代码之前,作者确实看了一段时间(我正在和他聊天......因为看起来至少有一个在我之前......在它被发现之前)。
作者在评论里贴出了API,到现在还不是很明显是什么问题。
所有讨论和研究该问题的人都(合理地)健全的身心,并且至少有一个基本的理解,即您实际上必须告诉编译器一个函数是类函数的实现而不仅仅是一个“功能”。
我认为这个问题的真正答案是:
不要尝试在午夜后编写代码...除非您天生喜欢夜间事件。
不要试图在午夜后帮助人们调试他们的代码...除非您天生喜欢夜间事件。
如果在查看问题超过 1 小时后,问题在解决方案中仍不明显,请走开,稍后再回来。
不要在午夜后给开发人员喂食,否则他们可能会变坏。
是的,我们都违反了这些规则。
关于c++ - ld : symbol(s) not found for architecture armv7 - Using a library?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876818/