簡體   English   中英

使用 c++ 在 xcode / 目標 c

[英]using c++ in xcode / objective c

所以我試圖在我的 ios 項目中使用 C++ 。

在我創建一個新項目(所有默認設置,全新安裝 xcode)后,我創建了一個Question.h和一個Question.mm文件,如下所示:

Question.h

#include <iostream>
#include <string>
using std::string;

class Question {
public:
   string text;
};


Question.mm

#include "Question.h"

它會出現以下錯誤: Iostream: No such file or directory

使用 Xcode 3.2.6 和 iOS SDK 4.3

我究竟做錯了什么?

最可能的原因是您將Question.h包含在非 C++ 文件中,例如,您的 AppDelegate 可能是 am 文件,而您試圖在其中包含Question.h

有兩種解決方案。 首先,您可以將所有內容都設為 Objective-C++(將所有.m 文件重命名為 .mm)。 從歷史上看,我發現這非常不方便,因為 Xcode 和 gdb 在使用 ObjC++ 時總是遇到很多麻煩,而且你會遇到很多混亂(可怕的“沒有這個指針”和“堆棧幀的未知語言”錯誤) gdb)。 我還沒有對最新版本的 Xcode 和 gdb 做足夠的工作來確定這是否仍然是一個問題,但我懷疑這是因為 gdb 還沒有完成很多工作。 此外,ObjC++ 編譯速度較慢。

另一種選擇是將您的 C++ 包裝到 ObjC中,以便您可以將其自由地包含在代碼的純 ObjC 部分中。 這是我通常采取的方法。 ObjC++ 是一種語言 IMO 有點混亂,我相信最好保持 ObjC (.m) 和 C++ (.cpp) 純凈並用一層薄薄的 ObjC++ (.mm) 將它們粘合在一起。

確保您的 main.m 文件沒有導入您的 AppDelegate 文件。 它可能會像這樣使用它:

NSStringFromClass([AppDelegate class])

但你可以這樣做:

@"AppDelegate"

這解決了我的問題。

嘗試將Question.mm重命名為Question.cpp ,因為 xcode 根據擴展名決定使用哪個編譯器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM