Inline-Funktion "undefined Symbol" Fehler
Ich schreiben wollen, eine inline-Funktion, aber ich bekomme eine Fehlermeldung. Wie kann ich es beheben?
Fehlerinformationen:
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;
}
}
- Nicht eine Antwort, aber kannst du nicht einfach verwenden, CGRectContainsPoint anstatt Ihre eigenen Rollen?
- Kompilieren mit-O2-Optimierung-Schalter war für mich, wie vorgeschlagen, in StackOverflow.com/questions/18939482/... und eine weitere Frage kann ich nicht mehr finden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Clang standardmäßig C99 und nicht GNU sematics, was bedeutet, dass eine raw -
inline
anders alsstatic inline
undextern inline
.Insbesondere eine raw -
inline
bedeutet, dass die Funktion noch hat externe Bindung, aber die inline-definition nicht aus, um den externen (Sie müsstenextern inline
für die).Was dies bedeutet ist, dass Sie brauchen eine zusätzliche
extern
definition in einer anderen übersetzungseinheit oder-Verknüpfung fehl. Jedoch sind Sie wahrscheinlich auf der Suche nachstatic inline
.clang
war nicht mehr C99 aber C11. GCC 5.0 und später auch standardmäßig C11 (aber vorher in Verzug zu C90). Dies ist nur ein kleines detail; es hat keinen Einfluss auf den rest der Antwort.Ich denke
XYInRect()
muss bekannt sein, bevor Sie verwendet werden. Verschieben Sie die definition einer Funktion an eine andere Stelle in der Datei, bevor Sie es nennen.Würde auch vorschlagen, mit
CGRectContainsPoint