Use corretamente o Objective C ++
Estou codificando um aplicativo para iOS e recentemente # incluí um arquivo de cabeçalho C ++ em um arquivo de implementação do Objective C (.m). Eu mudei a extensão de .m para .mm e esperava que tudo corresse suavemente.
Inesperadamente, recebi vários erros de compilador no arquivo .h da minha classe C ++.
Tais como: "C ++ requer um especificador de tipo para todas as declarações" e "membro duplicado ...".
Alguem sabe o que poderia estar causando isso?
Edit - Eu adicionei o arquivo de cabeçalho C ++ para contexto:
<code>#ifndef __CAAudioUnitOutputCapturer_h__ #define __CAAudioUnitOutputCapturer_h__ #include <AudioToolbox/ExtendedAudioFile.h> /* Class to capture output from an AudioUnit for analysis. example: CFURL fileurl = CFURLCreateWithFileSystemPath(NULL, CFSTR("/tmp/recording.caf"), kCFURLPOSIXPathStyle, false); CAAudioUnitOutputCapturer captor(someAU, fileurl, 'caff', anASBD); { captor.Start(); ... captor.Stop(); } // can repeat captor.Close(); // can be omitted; happens automatically from destructor */ class CAAudioUnitOutputCapturer { public: enum { noErr = 0 }; CAAudioUnitOutputCapturer(AudioUnit au, CFURLRef outputFileURL, AudioFileTypeID fileType, const AudioStreamBasicDescription &format, UInt32 busNumber = 0) : mFileOpen(false), mClientFormatSet(false), mAudioUnit(au), mExtAudioFile(NULL), mBusNumber (busNumber) { CFShow(outputFileURL); OSStatus err = ExtAudioFileCreateWithURL(outputFileURL, fileType, &format, NULL, kAudioFileFlags_EraseFile, &mExtAudioFile); if (!err) mFileOpen = true; } void Start() { if (mFileOpen) { if (!mClientFormatSet) { AudioStreamBasicDescription clientFormat; UInt32 size = sizeof(clientFormat); AudioUnitGetProperty(mAudioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, mBusNumber, &clientFormat, &size); ExtAudioFileSetProperty(mExtAudioFile, kExtAudioFileProperty_ClientDataFormat, size, &clientFormat); mClientFormatSet = true; } ExtAudioFileWriteAsync(mExtAudioFile, 0, NULL); // initialize async writes AudioUnitAddRenderNotify(mAudioUnit, RenderCallback, this); } } void Stop() { if (mFileOpen) AudioUnitRemoveRenderNotify(mAudioUnit, RenderCallback, this); } void Close() { if (mExtAudioFile) { ExtAudioFileDispose(mExtAudioFile); mExtAudioFile = NULL; } } ~CAAudioUnitOutputCapturer() { Close(); } private: static OSStatus RenderCallback( void * inRefCon, AudioUnitRenderActionFlags * ioActionFlags, const AudioTimeStamp * inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList * ioData) { if (*ioActionFlags & kAudioUnitRenderAction_PostRender) { CAAudioUnitOutputCapturer *This = (CAAudioUnitOutputCapturer *)inRefCon; static int TEMP_kAudioUnitRenderAction_PostRenderError = (1 << 8); if (This->mBusNumber == inBusNumber && !(*ioActionFlags & TEMP_kAudioUnitRenderAction_PostRenderError)) { OSStatus result = ExtAudioFileWriteAsync(This->mExtAudioFile, inNumberFrames, ioData); if (result) DebugMessageN1("ERROR WRITING FRAMES: %d\n", (int)result); } } return noErr; } bool mFileOpen; bool mClientFormatSet; AudioUnit mAudioUnit; ExtAudioFileRef mExtAudioFile; UInt32 mBusNumber; }; #endif // __CAAudioUnitOutputCapturer_h__ </code>