推荐问题:Problem when #import C++ Header File in iPhone/iPad Project
好吧,我的项目相对庞大,无法解决将 ALL或PART OF 我的项目文件.m
更改为.mm
或更改 ALL或PART OF {/ 1}}中的文件类型。
这是因为我的同事和图书馆作者不会严格遵守C ++标准,例如将File Inspector
分配给void*
以及其他各种违规行为。目标C允许这些并且只是发出警告。
我想int*
的C ++头文件是一个库。它在标头中使用关键字命名空间,而其实现位于#import
程序集文件中。这意味着几乎不可能破解它们。除此之外,我的项目还包括仅与Objective C兼容的其他库。
有谁知道如何解决这个问题?
我能想象的方式如下:
找到命名空间的替代方案,但我仍然想写
我项目中的.a
代码。
告诉编译器识别C ++标头(嗯,可能不是 可能的)
修改
QCAR::Renderer
如果我使用它,#ifdef __cplusplus
# include MyCPPHeader.h
#endif
真的会被包含在Objective-C环境中吗?我猜不会。这违反了不破解图书馆的原则。
修改
即使我更改了这些MyCPPHeader.h
文件以包含该C ++标头,我也会收到链接错误.mm
。当我的 Undefined symbols for architecture armv7:
文件包含其他库中的.mm
标题时,会发生这种情况。
答案 0 :(得分:0)
一年前我已经解决了这个问题,但对于其他正在寻找答案的人来说,这就是解决方案。
假设C ++样式标题名为cpp.h
。在我的项目中,我从不#import "cpp.h"
。我写了一个名为c.h
的C样式头,作为cpp.h
的包装头。然后我编写了一个名为c.mm
的C ++实现源文件,通过调用c.h
中的函数来实现cpp.h
中的函数define。如果我想调用cpp.h
中的函数,我#import c.h
并使用包装函数。
以下是可能更清晰的解释:
cpp.h
使用namespace
的C ++样式头文件,其实现是在汇编代码中,所以很难改变
c.h
C样式标题作为cpp.h
c.mm
C ++实现通过调用c.h
cpp.h
中的函数
#import "c.h"
使用包装函数