0

我在 Obj-C 代码中使用 C++ 对象。为此,我将 C++ 对象包装在 ObjC 对象中,这些对象又使用不透明指针来访问 C++ 类。那东西在起作用。

问题:C++ 对象(例如 CPPObj.cc)使用来自其他 C++ 头文件(例如 ToolsCPP.h)的方法---当我尝试编译 ObjC 代码(例如 Obj.mm)时,它抱怨这些方法是未定义的.

即使我直接在 Obj.mm 文件中包含 ToolsCPP.h,它仍然会抱怨。

丑陋的解决方案:在 CPPObj.cc 中包含来自 ToolsCPP.h 的所有必要方法,以便 C++ 对象完全自包含。这将是一个巨大的痛苦。

有没有更好/更容易/正确的方法来做到这一点?

谢谢!

4

4 回答 4

0

听起来您想将您的 ToolsCPP 代码(以及任何其他 C++ 依赖项)打包到一个库中,然后将其与您的 Obj-C 代码链接。

于 2011-05-26T01:13:39.630 回答
0

你要么必须包装你需要的东西(例如使用 objc 方法),要么使用 objc++ 来允许客户端适当地使用 c++ 类型。

于 2011-05-26T01:41:40.127 回答
0

我不知道您看到的确切错误,但我怀疑您可能需要在 .mm 文件中像这样用 extern "C" 包装基于 C 的标头:

extern "C" {
  #import "foo.h"
}

更多信息在这里: 为什么我们在 C++ 中需要 extern "C"{ #include <foo.h> }?

于 2011-05-26T01:33:58.290 回答
0

由于这显然是一个链接器错误,这意味着来自“ToolsCPP.cc”的代码,即对应于 ToolsCPP.h 的代码,没有被编译并与您的项目的其余部分链接。

检查 ToolsCPP.cc 是否包含在您的项目中,并确认它实际上正在被编译。

于 2011-05-26T02:14:21.217 回答