【问题标题】:Cocos2D-X Linker Error; what am I missing?Cocos2D-X 链接器错误;我错过了什么?
【发布时间】:2014-04-19 14:23:59
【问题描述】:

我在 XCode 5 上关注 iOS 的 Cocos2D-X 教程,讲师从创建一堆类和头文件开始。其中有一个名为“Utils.h”的头文件,其中包含一些静态函数

class Utils
{
public:
    static Game* gameLayer();
    static HUD* hudLayer();
    static cocos2d::CCLayer* layerWithTag(int tag);
    static cocos2d::CCSize s();
    static cocos2d::CCAnimate* getAnimationWithFrames(int from, int to);
    static void scaleSprite(cocos2d::CCSprite * sprite);
    static float getScale();
    static void setScale(float s);
    static float getArtScaleFactor();
    static void setArtScaleFactor(int s);
};

s() 函数在 Utils.cpp 中定义为 return CCDirector::sharedDirector()->getWinSize();

现在,问题是:在我的主菜单场景中调用 s() 函数时(例如 Utils::s().width),我收到此错误“链接器命令失败,退出代码为 1(使用 -v 查看调用) ”和“未找到架构 i386 的符号”。但是,当我从 Utils.cpp 中删除了s() 函数定义并只是在头文件的类中添加了该函数时,它就变成了

//Utils.h
class Utils
{
public:
     .......
     static cocos2d::CCSize s()
     {
         return CCDirector::sharedDirector()->getWinSize();
     }
     ......

编译没有错误...

为什么函数在cpp文件而不是头文件中时会出现此错误?我知道我的问题已经解决了,但这让我发疯了

谢谢! :)

编辑:我认为这是给定的,但更清楚的是,在主菜单场景中,我包含了 Utils.h 而不是 Utils.cpp

【问题讨论】:

  • 有该教程的链接吗?谢谢

标签: c++ ios xcode linker cocos2d-x


【解决方案1】:

请注意,当您在一个文件(例如 Cpp)中而不是在 .h 文件中声明函数时,也会出现此类错误。 我见过的最常见的原因是因为一个人在 .h 文件中声明了一个函数但忘记给出实现。

【讨论】:

  • 我确定我在.h文件中声明了函数并在cpp文件中实现了它。也许cpp中的实现不正确?我想我会检查一下。感谢您的提示!
  • 我想看看你是如何在 cpp 文件中声明它的。
  • 在 .h 文件中我得到了这个 static cocos2d::CCSize s(); 和 .cpp 我声明它像这样 cocos2d::CCSize s() { return CCDirector::sharedDirector()->getWinSize(); }
  • 当我尝试在主菜单场景中使用 Utils::s().width 时出现错误
  • 啊!你试过 cocos2d::CCSize Utils::s() { return CCDirector::sharedDirector()->getWinSize(); } ?如您所见,在您提供的代码中 s() 之前没有 Scope 解析运算符……那将是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2015-10-06
相关资源
最近更新 更多