从工作iOS项目中导入.cpp文件并将其重命名为.mm问题



我已将.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++ HeaderObjective-C++源。

只要您使用此文件类型的隔离设定,就应该能够自由混合C - 我通常会在我的iOS代码中使用此范式来消耗C 。