我已将.cpp及其.h文件从工作项目复制到新项目。
我将结尾从.cpp重命名为.mm,但它仍然给我错误。
在.h文件中,靠近类定义 class MeterTable
,它说它期望;
在.mm文件中,有各种错误。
我想到通过更改实现文件的结尾。mm,它将清洁所有这些错误。是的,原始的.cpp文件在旧项目下编译。
看起来您将.h
文件包括到其他.m
文件中。您不能只将C 标头包含在C或Objective-C源文件中。您需要确保您的C 接口兼容C 接口(没有类,只有免费功能而不会超载)。或者,您必须将项目中的所有.m
文件更改为.mm
。
唯一的解决方案是拥有一个内联标头文件。
将您的 .h 文件更改为 .hpp ,然后将您的 .cpp 文件与您的 .h 文件组合。
为例;您的 .h 文件:
// class.h
class {
public:
void someclass(int a);
};
和您的 .cpp 文件:
// class.cpp
#include "class.h"
void someclass(int a) {
return;
}
合并 .hpp 喜欢这样:
// class.hpp
class {
public:
void someclass(int a) {
return;
}
};
Objective-C和C 可以很好地播放,但是有几个警告。首先,必须将引用C 代码的任何.m
文件定义为Objective-C 源, not> objective-C。这可以逐案进行,通过转到.m
文件的文件检查器并将文件类型从Objective-C Source
更改为Objective-C++
源。其次,使用相同的方法定义.h
和.cpp
(或.mm
,实际扩展名并不重要,它分别为C++ Header
和Objective-C++
源。
只要您使用此文件类型的隔离设定,就应该能够自由混合C - 我通常会在我的iOS代码中使用此范式来消耗C 。