Меня сбивает с толку метод static
, определение которого, очевидно, находится в одном классе, но объявление которого совместно используется несколькими классами в одном и том же файле. Может ли он каким-либо образом совместно использоваться файлами?
Подробности
Я пытаюсь разделить файл .mm
на несколько файлов (по одному на класс). Весь исходный код взят из Пример CoreMIDI Пита Гудлиффа .
Я взял класс PGMidi отсюда и разбил его на отдельные интерфейсы и классы. Все отлично компилируется, за исключением одного метода, помеченного static
, который должен находиться в двух местах одновременно (он «используется, но никогда не определяется» в PGMidi). Метод «используется» в этой строке вне реализации любого класса:
static void PGMIDIReadProc(const MIDIPacketList *pktlist, void *readProcRefCon, void *srcConnRefCon);
, который, очевидно, используется всеми классами в одном файле (что?). Это упоминается в двух классах.
1) В PGMidi
, где он используется (возможно, указывает на PGMidiSource
s = MIDIInputPortCreate(client, (CFStringRef)@"MidiMonitor Input Port", PGMIDIReadProc, self, &inputPort);
2) В PGMidiSource
, где тело метода определено
static
void PGMIDIReadProc(const MIDIPacketList *pktlist, void *readProcRefCon, void *srcConnRefCon)
{
PGMidiSource *self = (PGMidiSource*)srcConnRefCon;
[self midiRead:pktlist];
}
Проблема в том, что self
, на который есть ссылка в теле метода, не имеет смысла в PGMidi
(нет midiRead
метода) ...
Что это за метод static
? Как я могу заставить его работать между двумя файлами?