如何修复“'Expected ';”在顶级声明符之后”和“未知类型名称 'class'?

How to fix ''Expected ';' after top level declarator" and "Unknown type name 'class'?

我用cocoa将腾讯用objective-c写的imSDK demo TUIKit导入到我空白的swift应用中。我收到错误:应为“;”在顶级声明符和未知类型名称 'class' 之后;你是说 '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);
}

.....

找了两天没找到答案。有什么帮助吗?谢谢

您的 wav.h 文件管理器正在包含在不是 .mm 文件的编译单元中(这意味着 "compile as Objective-C++" 即 .m.c 文件.

您需要用

将 class 定义括起来
#if defined __cplusplus

// the C++ defs

#endif

除非正在编译的文件是 C++ 或 Objective-C++,否则 #ifdef ... #endif 之间的行将被忽略。

如果您有需要知道类型存在的直接 Objective-C 文件,您可以使用 typedefvoid* 或使其成为不完整的 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.