27

インライン関数を書きたいのですが、エラーが発生します。どうすれば修正できますか?

エラー情報:

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;

    }
}
4

2 に答える 2

39

ClangのデフォルトはGNU sematicsではなくC99 です。つまり、 rawは と の両方とinlineは異なります。static inlineextern inline

特に、 rawinlineは、関数がまだ外部リンケージを持っていることを意味しますが、インライン定義は外部リンケージを提供しません (それが必要extern inlineです)。

externこれは、別の翻訳単位で追加の定義が必要であることを意味します。そうしないと、リンクが失敗します。ただし、おそらく探しているのはstatic inline.

于 2012-04-20T12:09:05.957 に答える
0

XYInRect()使用する前に知っておく必要があると思います。関数定義を呼び出す前に、ファイル内のどこかに移動してください。

于 2012-04-20T08:55:13.190 に答える