我正在编写一个需要对 C++ 类实例进行函数调用的 Objective-C 类。我找到了这个建议,但如果我尝试它,我会收到一个错误,因为类型“struct MyCPlusPlusClass”的定义不完整
struct MyCPlusPlusClass;
typedef struct MyCPlusPlusClass MyCPlusPlusClass;
@interface MyBridgeClass() {
MyCPlusPlusClass *my_CPlusPlus;
}
...
- (id)initWithMrGame:(MyCPlusPlusClass *)cPlusPlus
{
self = [super init];
if (self) {
my_CPlusPlus = cPlusPlusClass;
my_CPlusPlus->p_favorite_integer = 0; // Compiler error
}
return self;
}
实际定义出现在由预编译器生成的 .mm 文件中,只是为了增加另一层挑战。
我怎样才能让它工作?
编辑:解释亚当的回答
// in MyCode.h
struct MyCPlusPlusClass; // Forward declaration, no need for #include/#import
@interface MyBridgeClass() {
struct MyCPlusPlusClass *my_CPlusPlus;
}
// in MyCode.m
#include MyCode.h
// in BigGenerateFile.mm
class MyCPlusPlusClass;
class MyCPlusPlusClass { ... }
我的目标是能够在 MyCode.m 中使用 MyCPlusPlusClass,但我不能包含 .mm 文件,因为编译器非常不高兴。可能这个东西的架构方式会让我走一条不同的路。