我正在将项目移植到iPhone系统,我遇到了以下问题: 我有一个包含c ++模板的标题 如果我将它重命名为.mm,它不会编译(因为它应该是一个标题),如果我保持为.h,它被解释为一个客观的C标题
您有解决此问题的解决方法吗?
提前致谢!
此致
编辑:添加错误消息和代码
template <typename T>
class CML_Matrix
{
public:
//rest of teh template
};
错误消息是“无法找到typename的协议声明”
答案 0 :(得分:5)
将其包裹在
中#ifdef __cplusplus
//templates here
#endif
这样,当文件包含在C或Objective C(.m)源中时,模板将被静默忽略。
你也可以在
中包含一些Objective C-only构造#ifdef __OBJC__
编辑:您也可以将源(不是标题!)重命名为.mm。由于它是一个混合的ObjC / C ++项目,你可能必须在某个时候实例化/调用C ++类;为此,无论如何你都需要Objective C ++。但是从来没有试过这个。
答案 1 :(得分:4)
确保将包含C ++标头的文件编译为C ++或Objective-C ++。 Objective-C文件(扩展名为.m)无法成功编译C ++。将其扩展名更改为.mm可以解决您的问题。
答案 2 :(得分:2)
将其重命名为.hpp
。
(标题必须是#include
d .cpp
或.mm
文件。标题的扩展名除了向IDE提示其使用的语言外什么都没有。)