如何修复“'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 文件,您可以使用 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.
我用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 文件,您可以使用 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.