2012-02-14 8 views
1

私はC++実装ファイル(、しかし)からObjective C(++)クラスを呼び出すだけでなく、Objective Cクラスを使用しようとするたびに、C++オブジェクトをObjective C++ C++ヘッダーファイルでコンパイルエラーが発生します。 (のAppKit/..)私が試したが含まObj-C++ヘッダファイルのAppKitオブジェクト?

class CQuartzTextRenderer { 

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


private: 

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

何で:このクラスの宣言のような

スタッフはコンパイルに失敗します。 アイデア

+0

どこでエラーや警告が表示されますか?それは確かにあなたに答えを与えるのに役立ちます。 –

答えて

3

.cppが含まれているヘッダーファイル内にObjective-Cクラスを使用することはできません。単純にXCodeが標準のg ++​​コンパイラを使用し、そのファイルをプレーンなC++として扱うからです。

は、これらのエラーを修正するには(とヘッダファイルでのObjective-Cのクラスを使用することを許可する)あなたが いない.cppに、ONLY .mmファイルでヘッダファイルが含まれていることを確認する必要があります。

ちょうど追加:実際にfoobar.hfoobar.mmが結合していることがあります。これは正しく、Objective-Cをヘッダーファイルに含めることができますが、そのファイルが.cppまたは別の.h.cpp)に含まれていると、コンパイルエラーが発生します。すべてのユニットが他から独立してコンパイルされることを覚えておいてください。

+0

ええと、そうです** **誰も**そのファイルを含むObj-C++でなければなりません。 – Jay

+0

今すぐ働いてください。 – Jay

+0

私はObjective-CからC++への25k LOCプロジェクトを実際に移植しているので、同じ問題を解決しなければならなかったので、この原則を保証することができます。まず、すべての '.m'ファイルの名前を' .mm'に変更しました。今私は、もうObjective-Cが不要になるとすぐに、それらを '.cpp'に名前を変更しています。 – Jack