web-dev-qa-db-ja.com

Xcode 4.2で<string> not foundコンパイルエラーを含める

XCodeにinclude not foundコンパイルエラーが含まれています。 Objective-cとc ++をミックスとして使用するiOSアプリプロジェクトがあります。

最初に、iOSプロジェクトに1つの.hファイルと1つの.cppファイルを作成しました。次に、.cppファイルの名前を.mmファイルに変更しました。

これが私の.hファイルです。

TestLog.h

#ifndef CalculatorDemo_TestLog_h
#define CalculatorDemo_TestLog_h
#include <string>
using namespace std;

class TestLog
{
private:
    string logString;
public:
    void Log(string logMessage);
};


#endif

TestLog.mm

#include "TestLog.h"

void TestLog::Log(string logMessage)
{
    //this->logString->append(logMessage);

}

何が欠けていますか? targetSにstd c ++ライブラリを追加する必要がありますか?検索ヘッダーパスに関連するもの

文字列型を使用するだけです。

よろしくお願いします

16
ilker Acar

プロジェクトを選択->ビルド設定-> Apple LLVMコンパイラ5.1->言語

Compile Sources As への変更 Objective-C++

8
AmyG

XCodeには癖があります。 7.3で気づきました。ほとんどのプロジェクトは.mmファイルとSTLを認識しますが、私が認識しなかった1つのプロジェクトは認識しませんでした。修正は、左上のプロジェクトアイコンをクリックし、[ターゲット]> [ビルドフェーズ]> [バイナリをライブラリにリンク]をクリックして、AppKit.frameworkに追加する必要があったことです。次に、[ターゲット]> [ビルド設定]> [ソースのコンパイル]をクリックして、可能なすべての列で[Objective C++]に設定する必要がありました。次に、[製品]メニューから[クリーン]、[ビルド]の順に実行します。これは正しくコンパイルされました。次に、そのコンパイルソースに再度戻り、可能なすべての列で「ファイルタイプに従って」に戻します。次に、[製品]メニューから[ビルド]を再度クリックします。その時点で正しくコンパイルされ、「ファイルタイプに応じて」オプションを使用できるようになりました。

そして、Cocoaに関することを行う場合は、ファイルに次のヘッダーを追加することを忘れないでください。

#import <Cocoa/Cocoa.h>

また、コマンドラインに関することを行う場合は、Cocoaヘッダーの代わりに次のコードを追加することを忘れないでください。

#import <Foundation/Foundation.h>
4
Volomike

そのため、CocoapodsライブラリBypassでこの問題が発生し、これらのソリューションは何もしませんでした。問題は、Cocoapodsがアンブレラヘッダーと呼ばれるファイルを作成することでした。これは<POD_NAME>/Support Files/<POD_NAME>-umbrella.hにあります。それを削除すれば、問題なくビルドできるはずです。

なぜこれが必要なのかを説明します。包括的ヘッダーはC++とObjective-Cの両方のコードを直接ヘッダーに混在させています。これは明らかに大きな問題であり、C++インポートを完全に壊してしまいます。これを削除すると(効果がないように見えますか?)、Cocoapodが無意識に作成したこの競合するインポートはなくなります。

1
Sirens

ライブラリへのパス全体を含める必要があると思います。同様に「基礎」と「uiview」フレームワークを言う。

#import <Foundation/Foundation.h>

または

#import <UIKit/UIKit.h>

はい、ライブラリをターゲットに追加していることを確認してください。

1
DoS