Inline function “undefined symbols” error

橙三吉。 提交于 2019-11-26 20:50:17

问题


I want to write an inline function, but I get an error. How can I fix it?

Error information:

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)

Code:

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;

    }
}

回答1:


Clang defaults to C99 and not GNU sematics, which means a raw inline is different from both static inline and extern inline.

In particular, a raw inline means that the function still has external linkage, but the inline definition does not provide the external one (you'd need extern inline for that).

What this means is that you need an additional extern definition in a different translation unit or linking will fail. However, you're probably looking for static inline.




回答2:


I think XYInRect() needs to be known prior to being used. Move the function definition to some place in the file before you call it.




回答3:


Also would suggest using CGRectContainsPoint



来源:https://stackoverflow.com/questions/10243018/inline-function-undefined-symbols-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!