Erreur de fonction inline «symboles non définis»

Je veux écrire une fonction inline, mais j’obtiens une erreur. Comment puis-je le réparer?

Informations d’erreur:

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

La valeur par défaut de Clang est C99 et non la sématique GNU , ce qui signifie qu’un inline brut est différent static inline et extern inline .

En particulier, un inline brut signifie que la fonction a toujours un lien externe, mais la définition inline ne fournit pas le externe (vous auriez besoin de extern inline pour cela).

Cela signifie que vous avez besoin d’une définition extern supplémentaire dans une unité de traduction différente, sans quoi la liaison échouera. Cependant, vous êtes probablement à la recherche d’ static inline .

Je pense que XYInRect() doit être connu avant d’être utilisé. Déplacez la définition de la fonction à un endroit du fichier avant de l’appeler.

CGRectContainsPoint utiliser CGRectContainsPoint