2011-09-25 5 views
8

ココアアプリケーションで... ...私はXcodeの4.0でのCocoaアプリケーションをコンパイルしようとしていますし、私はこのエラーを取得してい

fatal error: 'string' file not found 

をする#include とエラーをコンパイルしますこの行のファイル:

#include <string> 

同じことを行うが、エラーは発生しない別のxcodeプロジェクトがあります。私はいくつかの異なるビルドの設定を精査したが、私は1つを見つけることができません。唯一の違いは、OKをコンパイルするプロジェクトは、Cocoaプロジェクトではなくコマンドラインプロジェクトとして開始されたが、ビルド設定は同じであるという点です。

ターゲットOS

は、Mac OS X 10.6プリコンパイル済みヘッダーをコンパイルすると、他のファイルのいずれかを取得していない場合、エラーが発生し

です。コンパイルされたバージョンが持つ唯一のフレームワークはFoundation.frameworkであり、コンパイルされていないものもあります。

なぜ1つのプロジェクトでは見つからないのですか?何かアドバイス?

+0

あなたのアプリはどの言語で書かれていますか? ''はC++のものではなく、Objective-Cのものではないのですか? –

+1

stlをobjective-C++で使用することができます。あなたのファイルに.mmという名前を付けるだけです。私は完全に新鮮なカカオアプリのテンプレートからこのプロジェクトで始まり、今は正常に動作します。 –

答えて

0

stringは、(std :: stringの)C++ヘッダーです。 strcpyのようなものをお探しの場合は、含める必要がありますstring.h

13

ソースファイルの拡張子は何ですか?それが ".m"の場合、obj-cpp ".mm"に変更して、Xcodeが正しい言語を推論するようにしてください。 それとも置くC++ - 「の#ifdef __cplusplus」ブロック

Update

この特定のPCHである含まれているため、ガードは、プロジェクトでコンパイル言語ごとに存在している必要があります内の特定のヘッダー。それはすべてのC + +および/またはobjC++だった場合、IOW、エラーはありません。明らかに、C++を認識しないファイルが少なくとも1つあります(CやObjCソースもターゲットにコンパイルされています)。したがって、あなたは単にそれのようにそれを守る:

// MONPrefix.pch 

#ifdef __cplusplus 
#include <string> 
#endif 

// same for objc, so your C and C++ sources compile with no error: 
#ifdef __OBJC__ 
#include <Foundation/Foundation.h> 
#endif 
+0

+1 * "#ifdef __cplusplus"ブロック "* - は適切な解決策ですが、この特定のインクルードがpchにあるため、プロジェクトでコンパイルされた各言語に対してガードが存在する必要があります。それがすべてのC++やobjC++であった場合、エラーはありません。明らかに、C++を認識しないファイルが少なくとも1つあります(例:cまたはobjc)。自分自身を更新するでしょう - 私は今これが何ヶ月か古いことを見ています:) – justin

+0

これは、Cocos2D-XプロジェクトのPrefix.pchを正しく設定する方法を理解するのに役立ちました。 "#ifdef __cplusplus"のC++固有のものをラップするのは魅力的です。 –

関連する問題