我有一些第三方来源,我尝试集成到我的应用中。大部分代码都是用C ++编写的,它在样本中运行良好。我将原始代码复制到我的项目中,现在它失败了,因为它在Obj-C标题中看到了C ++。
更新:
所讨论的源代码文件名为" SampleApplicationSession.mm",并且它与#34; SampleApplicationSession.h"相关联。 SampleApplicationSession.h导入C ++标头,并导出几个使用这些标头中找到的类型的方法,如下所示:
如果我导入包含这些类型的C ++标头,我会收到错误:
未知的类型名称'名称空间'
因此,尽管代码是.mm,但似乎编译器也没有将头部识别为Obj-C ++。
答案 0 :(得分:1)
QCAR :: State的问题是它不能用C或普通的Objective-C代码编译。这是我在类似情况下使用的解决方案:
#ifdef __cplusplus
typedef QCAR::State QCARState;
#else
typedef struct QCARState__ QCARState;
#endif
- (void)onQCARUpdate:(QCARState *)state;
现在每种语言都很开心。你甚至可以使用普通的C代码传递QCARState *指针。或者如果你有一个QCARState *类型的属性,你可以用普通的Objective-C代码编写
someObject.qcarState = otherObject.qcarState
它有效。仅作为一个例子。
答案 1 :(得分:0)
啊,好吧,明白了。
这实际上是一个编译器错误消息问题。问题不在于它声称的文件是问题,而是文件导入该文件。
所以我试图修复SampleApplicationSession.h,而实际上是mapVC.m导致了它。简单地说一次导入导致问题消失。
现在显而易见的解决方案是将mapVC.m重命名为mapVC.mm,但这会导致以前工作的代码中出现各种错误 - 即使没有导入也是如此。我想我会通过那种方式来打击......