方法一
檢查Build Settings項:
Build Settings
這里一定要選擇
According to File type
,Xcode會根據(jù)當(dāng)前文件類型來確定編譯模式彤灶。例如.h
會按C惰许、C++以及OC的模式編譯,而.m
會安全按照OC的模式編譯直砂,.mm
則是OC與C++的混編菌仁。切記不要為了圖方便省事而選擇
Objective-C++
,因為可能會伴生出很多編譯報錯静暂。
方法二
檢查Build Settings項:
Build Settings
這里需要選擇
libc++(LLVM C++ standard library with C++11 support)
济丘。
方法三
如果方法一與二都沒有奏效,那么問題可能是出在你導(dǎo)入的相關(guān)文件中洽蛀。
問題產(chǎn)生的原因是這樣的摹迷,如果你在一個.m
文件中導(dǎo)入了一個.h
文件,而這個.h
文件因為被導(dǎo)入到了這個.m
文件中郊供,間接導(dǎo)致Xcode對它的編譯模式認(rèn)定為OC峡碉,而這時候你在這個.h
文件中#include <string>
就一定會報錯。
分析清楚原因后驮审,解決也就很容易了鲫寄。你可以選擇將當(dāng)前導(dǎo)入了這個.h
的.m
文件修改后綴為.mm
,這樣就可以解決報錯疯淫。但是假如這個.m
文件為UIViewController
類的試圖控制類文件地来,則不建議這樣做,因為可能會有未知的伴生問題熙掺。一般來說靠抑,采用C++的代碼主要是在數(shù)據(jù)處理相關(guān)方面,需要用到他人封裝好的函數(shù)适掰、結(jié)構(gòu)體等代碼颂碧。因此我們可以專門構(gòu)造一個繼承自NSObject
的數(shù)據(jù)處理類,這個類的.m
文件改為.mm
类浪,讓它專門去與C++的代碼進(jìn)行交互载城,避免在UIView
中直接調(diào)用C++代碼。
最后具體情況具體分析费就,我這里方法三中列舉的解決方法是根據(jù)我的實際情況而想出來的诉瓦。
有不足的歡迎指正。