Как создать указатель на структуру и ввести его в действие?

#objective-c #c #oop

#objective-c #c #ооп

Вопрос:

может кто-нибудь сказать мне, где я здесь ошибаюсь? Я пытаюсь создать указатель на структуру aqData, которая передается в функцию, и ввести тип приведения его к структурному типу 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. И в чем заключается ваше сообщение об ошибке?

2. Ах, извините за это, пост отредактирован

Ответ №1:

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

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

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

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

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