Question Erreur de fonction en ligne "symboles non définis"


Je veux écrire une fonction en ligne, mais je reçois 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;

    }
}

23
2018-04-20 08:50


origine


Réponses:


Bruit la valeur par défaut est C99 et pas Sémantique GNU, ce qui signifie un cru inline est différent des deux static inline et extern inline.

En particulier, un cru inline signifie que la fonction a toujours un lien externe, mais la définition en ligne ne fournit pas la liaison externe (vous auriez besoin de extern inline pour ça).

Cela signifie que vous avez besoin d'un supplément extern définition dans une unité de traduction différente ou la liaison échouera. Cependant, vous recherchez probablement static inline.


34
2018-04-20 12:09



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


0
2018-04-20 08:55



Suggère aussi d'utiliser CGRectContainsPoint


0
2018-04-13 20:19