这个问题的解决办法是建立在你已经在对应路径下放入了被移除的libc++
文件,如libstdc++6.0.9.tbd
等。
方法一
检查Build Settings项:
这里一定要选择
According to File type
,Xcode会根据当前文件类型来确定编译模式。例如.h
会按C、C++以及OC的模式编译,而.m
会安全按照OC的模式编译,.mm
则是OC与C++的混编。切记不要为了图方便省事而选择
Objective-C++
,因为可能会伴生出很多编译报错。
方法二
检查Build Settings项:
这里需要选择
libc++(LLVM C++ standard library with C++11 support)
。
方法三
如果方法一与二都没有奏效,那么问题可能是出在你导入的相关文件中。
问题产生的原因是这样的,如果你在一个.m
文件中导入了一个.h
文件,而这个.h
文件因为被导入到了这个.m
文件中,间接导致Xcode对它的编译模式认定为OC,而这时候你在这个.h
文件中#include <string>
就一定会报错。
分析清楚原因后,解决也就很容易了。你可以选择将当前导入了这个.h
的.m
文件修改后缀为.mm
,这样就可以解决报错。但是假如这个.m
文件为UIViewController
类的试图控制类文件,则不建议这样做,因为可能会有未知的伴生问题。一般来说,采用C++的代码主要是在数据处理相关方面,需要用到他人封装好的函数、结构体等代码。因此我们可以专门构造一个继承自NSObject
的数据处理类,这个类的.m
文件改为.mm
,让它专门去与C++的代码进行交互,避免在UIView
中直接调用C++代码。
最后具体情况具体分析,我这里方法三中列举的解决方法是根据我的实际情况而想出来的。
有不足的欢迎指正。
网友评论