2012-02-14 57 views
1

我愉快地使用在C++对象,客观C++(.mm)头和实现文件,并通过电话为目标C(++),从我的C类++实现文件,每一个企图利用目标C类在C++头文件导致编译器错误。Obj-C++头文件中的AppKit对象?

这样的东西类声明无法编译:

class CQuartzTextRenderer { 

public: 
       CQuartzTextRenderer(); 
virtual  ~CQuartzTextRenderer(); 
virtual void Render(CDrawingOptions &inDrwOpt); 


private: 

    NSFont* CreateNSFontForFontName(string &fontName, int fontSize); 
}; 

不管什么(AppKit的/ ..)包括我试过。 任何想法?

+0

你从哪里得到的错误/警告?这当然有助于给你一个答案。 – 2012-02-14 14:28:21

回答

3

仅仅因为XCode将使用标准g ++编译器并将该文件视为纯C++,您不能在包含在.cpp中的头文件中包含Objective-C类。

要修复这些错误(和被允许在头文件使用Objective-C类),你必须确保头文件仅包含由.mm文件,不以任何.cpp

只是一个补充:它可能发生,你实际上有foobar.h再加上foobar.mm。这是正确的,并允许你在头文件中的Objective-C,但如果包含该文件在其他地方由.cpp或由另一.h它由.cpp包括,那么你会得到编译错误。请注意,每个单位都是独立编译的。

+0

呃,对 - **包括该文件的任何人都必须是Obj-C++。有点意义! – Jay 2012-02-14 14:31:58

+0

现在工作 - 欢呼声。 – Jay 2012-02-14 14:32:43

+0

我可以保证这个原则,因为我实际上是Objective-C的移植一个25K LOC项目,C++,所以我不得不解决的问题相同。首先,我将所有'.m'文件重命名为'.mm'。现在我慢慢地他们重命名为'尽快.cpp',因为他们不需要任何Objective-C的了.. – Jack 2012-02-14 14:33:04