我很高兴在目标C ++(。mm)标头和实现文件中使用C ++对象,以及从我的C ++实现文件中调用Objective C(++)类,但每个尝试在 C ++头文件中使用Objective C类会导致编译器错误。
这个类声明的东西无法编译:
class CQuartzTextRenderer {
public:
CQuartzTextRenderer();
virtual ~CQuartzTextRenderer();
virtual void Render(CDrawingOptions &inDrwOpt);
private:
NSFont* CreateNSFontForFontName(string &fontName, int fontSize);
};
无论如何(AppKit / ..)包括我尝试过。 有什么想法吗?
答案 0 :(得分:3)
您不能在.cpp
包含的头文件中包含Objective-C类,因为XCode将使用标准g ++编译器并将该文件视为普通C ++。
要修复这些错误(并允许在头文件中使用Objective-C类),您必须确保只有.mm
个文件包含头文件,而不是{ {1}}。
只是一个补充:实际上你可能会.cpp
加上foobar.h
。这是正确的,允许您在头文件中包含Objective-C,但如果该文件被foobar.mm
或.cpp
包含的另一个.h
包含在其他地方,那么您会收到编译错误。请注意,每个单元都是独立编译的。