2011-10-24 19 views
5

Objective-CクラスのヘッダーにCスタイルの関数を配置しようとしています。 (私の用語はここで間違っているかもしれません - 私はちょうど関数ではなくObjective-Cクラスのメソッドを書くことに慣れています)。これは次のようになります。ヘッダーのObj-C関数宣言

// Sort function 
NSInteger sort(NSString *aString, NSString *bString, void *context); 

NSInteger sort(NSString *aString, NSString *bString, void *context) { 
    return [aString compare:bString options:NSNumericSearch]; 
} 

Unforuntatelyこれは、その結果:、 ' '

期待

'=' ';' '{' トークンの前に、 'ASM' または' 属性'

私には何が欠けていますか?ありがとうございました。

答えて

11

私の推測では、あなたのクラスの@interface内に関数定義を置くことです。 - または+ Cスタイルのメソッドを宣言するときは、忘れる必要があります

// declare C functions here 
NSInteger sort(NSString *aString, NSString *bString, void *context); 

@interface MyClass : NSObject 
{ 
    // class instance vars 
} 

// class properties & instance methods 
@end 
1

:代わりに、必ずCスタイルの関数宣言は、Objective-Cの@interface宣言の外にあることを確認してください。ただ、@end文の前に、標準C 1のような方法を宣言します

void function_name(int, int);

2

をあなたの関数の本体は、.mファイルではなく、ヘッダーにする必要があります。

関数の宣言(NSInteger sort(NSString *aString, NSString *bString, void *context);)がヘッダに残っている限り、ヘッダをインポートする場所からでもソート関数にアクセスすることができます。