Вызов статического метода с синтаксисом C в Obj-C? - PullRequest
4 голосов
/ 06 января 2012

Я мог бы переделать этот метод, используя правильный синтаксис Obj-C, но мне было интересно, как вызвать это из Obj-C. Метод выглядит так

@interface YarMidiCommon : NSObject

static
MIDIPacketList *makePacketList(Byte *packetBuffer, const UInt8 *data, UInt32 size);

@end

но я понятия не имею, как вызвать этот метод. Я пытался

Byte packetBuffer[size+100];
MIDIPacketList *packetList = makePacketList(packetBuffer, bytes, size);

но ошибка "имеет внутреннюю связь, но не определена". Возможно ли это без использования «правильного» синтаксиса Obj-C?

Кстати, метод, который я хочу эмулировать, будет выглядеть примерно так:

+ (MIDIPacketList*) makePacketListWithPacketBuffer:(Byte*)packetBuffer data:(const UInt8 *)data size:(UInt32)size;

, который многословен и раздражает, видя, что все здесь - C в любом случае.

Это связано с другим ответом, который я получил сегодня.

Ответы [ 3 ]

8 голосов
/ 06 января 2012

Поскольку функция является функцией C, вам необходимо удалить статическое ключевое слово, иначе оно не будет видно за пределами единицы перевода.Как только вы это сделаете, ваш первый пример будет работать.Кроме того, поскольку это функция C, размещающая свое объявление внутри или снаружи @interface, а определение внутри или снаружи @implementation не имеет значения в том, как вы ее вызовете.

5 голосов
/ 06 января 2012

Считайте объявление эквивалентным статической функции C в глобальной области видимости.Это сильно отличается от C ++ или Java.Для этой функции не существует области видимости или внешней связи.

Таким образом, область @interface не будет подходящим местом для объявления makePacketList.Сообщение означает, что определение не отображается при использовании.

1 голос
/ 06 января 2012

Вам нужно переместить функцию на .m (имеет смысл, если вы используете ее только из этого файла) или удалить ключевое слово static.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...