请求成员______是非类型的

时间:2011-02-03 12:06:12

标签: c++

美好的一天美妙的地球计算机人!

以下是名为AudioQueue.h的文件中的结构:

typedef struct AudioQueueBuffer {
const UInt32                    mAudioDataBytesCapacity;
void * const                    mAudioData;
UInt32                          mAudioDataByteSize;
void *                          mUserData;

const UInt32                    mPacketDescriptionCapacity;
AudioStreamPacketDescription *  const mPacketDescriptions;
UInt32                          mPacketDescriptionCount;
#ifdef __cplusplus
AudioQueueBuffer() : mAudioDataBytesCapacity(0), mAudioData(0), mPacketDescriptionCapacity(0), mPacketDescriptions(0) { }
#endif
} AudioQueueBuffer;

/*!
@typedef    AudioQueueBufferRef
@abstract   An pointer to an AudioQueueBuffer.
*/
typedef AudioQueueBuffer *AudioQueueBufferRef;

然后在AudioPlayer.h的标题中有这个:

    AudioQueueBufferRef             mBuffers[kNumberBuffers];

然后我要做的是:

for (int i = 0; i < kNumberBuffers; ++i) {

    printf("%i\n", &mBuffers[i].mAudioData );

    XThrowIfError(AudioQueueAllocateBufferWithPacketDescriptions(mQueue, bufferByteSize, (isFormatVBR ? mNumPacketsToRead : 0), &mBuffers[i]), "AudioQueueAllocateBuffer failed");

基本上我正在尝试访问mAudioData中的信息,但得到错误:

request for member 'mAudioData' in '((AQPlayer*)this)->AQPlayer::mBuffers[i]', which is of non-class type 'AudioQueueBuffer*'

任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:7)

AudioQueueBufferRef是一个AudioQueueBuffer指针。 mBuffers是这些中的一个数组。因此,在引用mBuffers元素的成员时,您应该使用->而不是.

printf("%i\n", &mBuffers[i]->mAudioData );

(我猜你可能也不想要& - mAudioData持有的地址似乎比在其AudioQueueBuffer结构中该成员的位置更有用。

答案 1 :(得分:1)

你正在处理一系列指向AudioQueueBuffer的指针。

尝试使用->代替.

访问字段
assert(mBuffers[i]);
std::cout << &mBuffers[i]->mAudioData << "\n";

编辑:moonshadow打败了我