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 ++ライブラリを追加する必要がありますか?検索ヘッダーパスに関連するもの
文字列型を使用するだけです。
よろしくお願いします
プロジェクトを選択->ビルド設定-> Apple LLVMコンパイラ5.1->言語
Compile Sources As
への変更 Objective-C++
XCodeには癖があります。 7.3で気づきました。ほとんどのプロジェクトは.mmファイルとSTLを認識しますが、私が認識しなかった1つのプロジェクトは認識しませんでした。修正は、左上のプロジェクトアイコンをクリックし、[ターゲット]> [ビルドフェーズ]> [バイナリをライブラリにリンク]をクリックして、AppKit.frameworkに追加する必要があったことです。次に、[ターゲット]> [ビルド設定]> [ソースのコンパイル]をクリックして、可能なすべての列で[Objective C++]に設定する必要がありました。次に、[製品]メニューから[クリーン]、[ビルド]の順に実行します。これは正しくコンパイルされました。次に、そのコンパイルソースに再度戻り、可能なすべての列で「ファイルタイプに従って」に戻します。次に、[製品]メニューから[ビルド]を再度クリックします。その時点で正しくコンパイルされ、「ファイルタイプに応じて」オプションを使用できるようになりました。
そして、Cocoaに関することを行う場合は、ファイルに次のヘッダーを追加することを忘れないでください。
#import <Cocoa/Cocoa.h>
また、コマンドラインに関することを行う場合は、Cocoaヘッダーの代わりに次のコードを追加することを忘れないでください。
#import <Foundation/Foundation.h>
そのため、CocoapodsライブラリBypassでこの問題が発生し、これらのソリューションは何もしませんでした。問題は、Cocoapodsがアンブレラヘッダーと呼ばれるファイルを作成することでした。これは<POD_NAME>/Support Files/<POD_NAME>-umbrella.h
にあります。それを削除すれば、問題なくビルドできるはずです。
なぜこれが必要なのかを説明します。包括的ヘッダーはC++とObjective-Cの両方のコードを直接ヘッダーに混在させています。これは明らかに大きな問題であり、C++インポートを完全に壊してしまいます。これを削除すると(効果がないように見えますか?)、Cocoapodが無意識に作成したこの競合するインポートはなくなります。
ライブラリへのパス全体を含める必要があると思います。同様に「基礎」と「uiview」フレームワークを言う。
#import <Foundation/Foundation.h>
または
#import <UIKit/UIKit.h>
はい、ライブラリをターゲットに追加していることを確認してください。