Встроенная функция "undefined symbol" error
Я хочу написать встроенную функцию, но я получаю сообщение об ошибке. Как я могу это исправить?
Информация об ошибке:
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;
}
}
Ответы
Ответ 1
Clang по умолчанию используется для C99, а не GNU sematics, что означает, что raw inline
отличается от static inline
и extern inline
.
В частности, raw inline
означает, что функция по-прежнему имеет внешнюю связь, но встроенное определение не обеспечивает внешний (для этого вам потребуется extern inline
).
Это означает, что вам нужно дополнительное определение extern
в другом блоке перевода или сбой связи. Однако вы, вероятно, ищете static inline
.
Ответ 2
Я думаю, что XYInRect()
должно быть известно до использования. Перед вызовом переместите определение функции в какое-то место в файле.
Ответ 3
Также предлагается использовать CGRectContainsPoint