我在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
答案 0 :(得分:0)
请注意,当您在一个文件(例如Cpp)中声明了一个函数而不是在.h文件中时,也会出现此类错误。 我见过的最常见的原因是因为一个人在.h文件中声明了一个函数但忘了给出实现。