使用Obj-C/Obj-C++中的C++对象——调用外部方法 我在Obj-C代码中使用C++对象。为此,我将Objc对象中的C++对象包装起来,然后使用不透明指针访问C++类。那玩意儿起作用了

使用Obj-C/Obj-C++中的C++对象——调用外部方法 我在Obj-C代码中使用C++对象。为此,我将Objc对象中的C++对象包装起来,然后使用不透明指针访问C++类。那玩意儿起作用了,c++,objective-c,wrapper,linker-errors,opaque-pointers,C++,Objective C,Wrapper,Linker Errors,Opaque Pointers,问题是: C++对象例如CPPOBJ.CC使用来自其他C++头文件的方法,例如TooScpp.H.当我尝试编译Objc代码,例如Obj.MM时,它抱怨这些方法是未定义的。 即使我直接在Obj.mm文件中包含ToolsCPP.h,它仍然会抱怨 丑陋的解决方案: 包括CPPObj.cc中的ToeScpp.h所有必要的方法,以便C++对象完全自包含。这将是一个巨大的痛苦 有没有更好/更容易/正确的方法来做这件事 谢谢 > P>听起来你想把你的ToeScpp代码和任何其他C++依赖项打包成一个库,然后将

问题是: C++对象例如CPPOBJ.CC使用来自其他C++头文件的方法,例如TooScpp.H.当我尝试编译Objc代码,例如Obj.MM时,它抱怨这些方法是未定义的。 即使我直接在Obj.mm文件中包含ToolsCPP.h,它仍然会抱怨

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

有没有更好/更容易/正确的方法来做这件事


谢谢

> P>听起来你想把你的ToeScpp代码和任何其他C++依赖项打包成一个库,然后将它与你的Obj-C代码链接起来。

< P>我不知道你看到的确切错误,但是我怀疑你需要在你的.mm文件中把你的基于C的头文件用这个外部C包包起来:

extern "C" {
  #import "foo.h"
}
更多信息请点击此处:

< p>您必须使用Objc方法包装您需要的东西,或者使用Objc++来允许客户端适当使用C++类型。

< P>因为这显然是链接错误,意味着来自ToolsCPP.cc的代码,即对应于TooScpp.h的代码没有被编译并与您的项目的其余部分连接。
检查ToolsCPP.cc是否包含在您的项目中,并确认它实际上正在编译。

如果您输入编译器正在编写的确切错误消息,这将非常有用。作者提到该文件是Obj.mm,因此看起来他正在使用objc++。