C++ ld:未找到架构armv7的符号-使用库?

C++ ld:未找到架构armv7的符号-使用库?,c++,cocos2d-x,C++,Cocos2d X,我使用的是Cocos2D-X,给出了以下代码片段: CCSwipeGestureRecognizer * swipe = CCSwipeGestureRecognizer::create(); swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe)); swipe->setDirection(kSwipeGestureRecognizerDirectionRight | kSwipeGestureRecog

我使用的是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行会使一切正常。

这里简单的回答是函数定义不正确。它的定义是:

void didSwipe(CCObject* obj)
{
   exit(0);
}
应该是:

void GameplayScene::didSwipe(CCObject* obj)
{
   exit(0);
}
也就是说,实现类的成员函数,而不仅仅是文件中的函数

但是,我想强调这一点,虽然这可能是确切问题的答案,但我不认为这是为什么这是一个问题的答案。

某个编辑可能会进来清理这个话题,但我还是会把它放进去

鉴于:

  • 作者在看到这段代码之前确实看了一段时间(我和他聊过了……因为在找到它之前,至少有一段代码在我之前)

  • 作者在评论中发布了API,但仍然不清楚问题出在哪里

  • 所有讨论和研究这个问题的人都有(合理的)健全的头脑和身体,并且至少有一个基本的理解,即你必须告诉编译器一个函数是一个类函数的实现,而不仅仅是一个“函数”

  • 我认为这个问题的真正答案是:

  • 不要试图在午夜后编写代码……除非你是自然的夜间活动者

  • 不要试图帮助人们在午夜后调试他们的代码……除非你是天生的夜间活动者

  • 如果问题在你看了一个多小时后,在解决方案中没有明显表现出来,那就走开,稍后再来

  • 不要在午夜后给开发者喂食,否则他们可能会变坏


  • 是的,我们都违反了这些规则。

    “我甚至不知道它在问我什么”-可能我们也不知道,因为您没有在问题中输入准确、完整的错误信息。我不得不假设缺少的是
    callfuncO_selector
    ?@WhozCraig我以为标题是所有相关的——但我编辑了全文。我永远不会停止让我惊讶的是,那些不知道代码有什么问题的人觉得有资格确定哪些信息是相关的,哪些是不相关的!你能在游戏场景中发布你的didSwipe(…)方法的实现吗?H:void didSwipe(cObject*obj);CPP:void didSwipe(CCObject*obj){exit(0);}