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;
}
}
Clang defaults to C99 and not GNU sematics, which means a raw
inlineis different from bothstatic inlineandextern inline.In particular, a raw
inlinemeans that the function still has external linkage, but the inline definition does not provide the external one (you’d needextern inlinefor that).What this means is that you need an additional
externdefinition in a different translation unit or linking will fail. However, you’re probably looking forstatic inline.