使用Obj-C / Obj-C ++中的C ++对象 - 调用外部方法

时间:2011-05-25 22:29:20

标签: c++ objective-c wrapper linker-errors opaque-pointers

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

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

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

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

有没有更好/更容易/更合适的方法呢?

谢谢!

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

更多信息: Why do we need extern "C"{ #include <foo.h> } in C++?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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