2011-10-24 4 views
5

Я пытаюсь поместить функцию C-стиля в заголовок класса Objective-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 находятся за пределами деклараций @interface Objective-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-стилизованного методы, которые вы должны забыть о - или +. Просто объявить метод как стандартный C один перед @end заявление:

void function_name(int, int);

2

В теле функции должен находиться в файле .m, а не в заголовке.

Пока декларация вашей функции (NSInteger sort(NSString *aString, NSString *bString, void *context);) остается в заголовке, вы все равно сможете получить доступ к функции сортировки из любого места, где вы импортируете заголовок.

Смежные вопросы