Встроенная функция «неопределенные символы» ошибка

Я хочу написать встроенную функцию, но я получаю ошибку. Как я могу это исправить?

Информация об ошибке:

<code>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>

Код:

<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;

    }
}
</code>
 jrturton20 апр. 2012 г., 10:57
Не ответ, но можете ли вы просто использовать CGRectContainsPoint вместо собственного?
 devon29 дек. 2017 г., 03:06
Компиляция с ключом оптимизации -O2 работала для меня, как предложено вStackOverflow.com/questions/18939482/… и другой вопрос я больше не могу найти.

Ответы на вопрос(3)

Решение Вопроса

по умолчанию C99 и неСемантика GNU, что означает сырьеinline отличается от обоихstatic inline а такжеextern inline.

В частности, сыройinline означает, что функция все еще имеет внешнюю связь, но встроенное определение не обеспечивает внешнюю (вам нужноextern inline для этого).

Это означает, что вам нужно дополнительноеextern определение в другой единице перевода или связывание не удастся. Однако вы, вероятно, ищетеstatic inline.

 05 июн. 2012 г., 20:58
Это правильно. Ура! И спасибо.
 28 окт. 2016 г., 06:04
Обратите внимание, что ко времени выпуска XCode 8.1 (2016-10-27) язык по умолчанию для (выпуска Apple)clang был уже не С99, а С11. GCC 5.0 и более поздние версии также по умолчанию C11 (но ранее по умолчанию C90). Это только незначительная деталь; это не влияет на остальную часть ответа.

Также предложил бы использоватьCGRectContainsPoint

Я думаюXYInRect() должен быть известен до использования. Переместите определение функции в какое-то место файла, прежде чем вызывать его.

 20 апр. 2012 г., 14:17
это будет компиляция, а не ошибка компоновки

Ваш ответ на вопрос