Как исправить '' Ожидаемый ';'после объявления верхнего уровня "и" Неизвестное имя типа "класс"? - PullRequest
0 голосов
/ 29 мая 2019

Я использую какао для импорта TUIKit, который представляет собой демонстрацию imSDK, написанную Tencent в цели-c, в мое пустое быстрое приложение. Я получаю сообщение об ошибке: Ожидается ';' после объявления верхнего уровня и неизвестного имени типа «класс»; Вы имели в виду «Class»?

Файл с ошибкой wav.h и файл wav.mm. Вот код:

Файл wav.h

#ifndef WAV_H
#define WAV_H
#include <stdio.h>
class WavWriter {
public:
    WavWriter(const char *filename, int sampleRate, int bitsPerSample, int channels);
    ~WavWriter();
    void writeData(const unsigned char* data, int length);
private:
    void writeString(const char *str);
    void writeInt32(int value);
    void writeInt16(int value);
    void writeHeader(int length);
    FILE *wav;
    int dataLength;
    int sampleRate;
    int bitsPerSample;
    int channels;
};
#endif

Ошибка в строке "class WavWriter".

Файл wav.mm

#import <UIKit/UIKit.h>
#include "wav.h"
void WavWriter::writeString(const char *str) {

    fputc(str[0], wav);
    fputc(str[1], wav);
    fputc(str[2], wav);
    fputc(str[3], wav);
}

....

Я искал два дня и не мог найти ответ. Любая помощь? Спасибо.

1 Ответ

1 голос
/ 29 мая 2019

Ваш wav.h файлер включен в модуль компиляции, который не является файлом .mm (что означает "компилировать как Objective-C ++", т.е. файл .m или .c.

Вам необходимо заключить определение класса в

#if defined __cplusplus

// the C++ defs

#endif

Строки между #ifdef ... #endif будут игнорироваться, если компилируемый файл не является C ++ или Objective-C ++.

Если у вас есть прямые файлы Objective-C, которые должны знать, что тип существует, вы можете использовать typedef - void* или сделать его неполным struct типом

#if defined __cplusplus

// the C++ defs

class WavWriter {
// ...
};

#else

typedef struct WavWriter WavWriter; // Sets up incomplete type for C code

#endif

@interface Foo

@private
    WavWriter* writer; // In C++ a pointer to your class, in C a pointer to an opaque type.
...