你能将C ++类导入任何Obj-C头吗?

时间:2014-05-02 14:05:25

标签: c++ objective-c

我有一些第三方来源,我尝试集成到我的应用中。大部分代码都是用C ++编写的,它在样本中运行良好。我将原始代码复制到我的项目中,现在它失败了,因为它在Obj-C标题中看到了C ++。

更新:

所讨论的源代码文件名为" SampleApplicationSession.mm",并且它与#34; SampleApplicationSession.h"相关联。 SampleApplicationSession.h导入C ++标头,并导出几个使用这些标头中找到的类型的方法,如下所示:

  • (void)onQCARUpdate:(QCAR :: State *)state;

如果我导入包含这些类型的C ++标头,我会收到错误:

未知的类型名称'名称空间'

因此,尽管代码是.mm,但似乎编译器也没有将头部识别为Obj-C ++。

2 个答案:

答案 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,但这会导致以前工作的代码中出现各种错误 - 即使没有导入也是如此。我想我会通过那种方式来打击......