objective-c - 如何创建指向结构的指针并对其进行类型转换?

标签 objective-c c oop

有人能告诉我哪里出错了吗?我试图创建一个指向传递给函数的结构 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;

在此先感谢您的帮助

最佳答案

我相信 Objective-C 的行为与 C 相同。如果不是,这可能不适用于 Objective-C

C 中的结构通过它们的“全名”来识别。 试试

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

或者更好,根本不转换。 C 编译器知道如何将 void* 转换为任何其他指向对象的指针

    struct AQPlayerState *pAqData = aqData;
  • 隐式转换:
  • 显式转换(cast):不太好

关于objective-c - 如何创建指向结构的指针并对其进行类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928438/

相关文章:

ios - 具有不同高度的垂直对齐的 Collection View 单元格

objective-c - 带背景的自定义 AlertView

objective-c - #在 objective-c 中定义

c - 将变量分配给结构成员

language-agnostic - 面向对象编程的发展背后的思想是什么?

java - 为什么 StringBuffer/StringBuilder 不覆盖 equals 或 hashCode?

ios - 使用 UINavigationController 关闭 UIPopoverController

c - Unix:获取 execl 函数以从标准输入读取

c++ - 跟踪#include 依赖项的工具

oop - 为什么 ABAP 将类分为实现和定义?