2012-02-14 26 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