27

我想写一个内联函数,但我得到一个错误。我该如何解决?

错误信息:

Undefined symbols for architecture i386:
  "_XYInRect", referenced from:
      -[BeginAnimation ccTouchesEnded:withEvent:] in BeginAnimation.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

代码:

CGPoint location = CGPointMake(60, 350);

if (XYInRect(location, 53, 338, 263, 369)) {

}

inline BOOL XYInRect(CGPoint location, float MixX, float MixY, float MaxX ,float MaxY){
    if (location.x >MixX && location.y >MixY && location.x <MaxX && location.y <MaxY) {
        return YES;
    } else {
        return NO;

    }
}
4

2 回答 2

39

Clang默认为 C99而不是GNU sematics,这意味着 raw与 和inline不同。static inlineextern inline

特别是,原始inline意味着该函数仍然具有外部链接,但内联定义不提供外部链接(您需要这样做extern inline)。

这意味着您需要extern在不同的翻译单元中添加额外的定义,否则链接将失败。但是,您可能正在寻找static inline.

于 2012-04-20T12:09:05.957 回答
0

我认为XYInRect()在使用之前需要了解。在调用之前将函数定义移动到文件中的某个位置。

于 2012-04-20T08:55:13.190 回答