Как вы создаете указатель на структуру и набираете ее? - PullRequest
0 голосов
/ 08 мая 2011

Может кто-нибудь сказать мне, где я здесь не так? Я пытаюсь создать указатель на структуру aqData, которая передается в функцию, и тип type приведите его к типу структуры AQPlayerState.

Я получаю ошибки - Использование необъявленного идентификатора "AQPlayerState" и ожидаемого выражения

    @implementation AudioPlayer

#define kNumberBuffers 3

struct AQPlayerState {
    AudioStreamBasicDescription   mDataFormat;
    AudioQueueRef                 mQueue;
    AudioQueueBufferRef           mBuffers[kNumberBuffers];
    AudioFileID                   mAudioFile;
    UInt32                        bufferByteSize;
    SInt64                        mCurrentPacket;
    UInt32                        mNumPacketsToRead;
    AudioStreamPacketDescription  *mPacketDescs;
    bool                          mIsRunning;
};

static void HandleOutputBuffer (
                                void                *aqData,
                                AudioQueueRef       inAQ,
                                AudioQueueBufferRef inBuffer
                                ) {

    struct AQPlayerState *pAqData = (AQPlayerState *) aqData;

Заранее спасибо за любую помощь

1 Ответ

3 голосов
/ 08 мая 2011

Я считаю, Objective-C ведет себя как C. Если это не так, это может не относиться к Objective-C.

структуры в C распознаются по их «полному имени». Попробуйте

    struct AQPlayerState *pAqData = (struct AQPlayerState *) aqData;

или , еще лучше , вообще не разыгрывайте. Компилятор C знает, как преобразовать void* в любой другой указатель на объект

    struct AQPlayerState *pAqData = aqData;
  • неявное преобразование: хорошо
  • явное преобразование (приведение): не очень хорошо
...