objectivec-使用Obj-c/Obj-c++中的c++对象-调用外部方法
objective c - Using C++ objects from Obj-C / Obj-C++ -- Calling external methods
我在Obj-C代码中使用C++对象。为了做到这一点,我将C++对象封装在ObjC对象中,而ObjC又使用不透明指针来访问C++类。这些东西正在发挥作用。
问题:C++对象(例如CPPObj.cc)使用其他C++头文件(例如ToolsCPP.h)中的方法——当我试图编译ObjC代码(例如Obj.mm)时,它抱怨这些方法未定义。
即使我将ToolsCPP.h直接包含在Obj.mm文件中,它仍然会抱怨。
丑陋的解决方案:在CPPObj.cc中包含ToolsCPP.h中的所有必要方法,这样C++对象就完全独立了。这将是一个巨大的痛苦。
有什么更好/更容易/正确的方法可以做到这一点吗?
谢谢!
听起来你想把你的ToolsCPP代码(以及任何其他C++依赖项)打包到一个库中,然后把它和你的Obj-C代码链接起来。
我不知道你看到的确切错误,但我怀疑可能是你需要在.mm文件中用外部"C"包装你的基于C的头:
extern "C" {
#import "foo.h"
}
更多信息请点击此处:为什么我们需要外部的";C";{#include<foo.h>}在C++中?
您要么必须包装您需要的内容(例如使用objc方法),要么使用objc++允许客户端适当地使用c++类型。
由于这显然是一个链接器错误,这意味着"ToolsCPP.cc"中的代码,即对应于ToolsCPP.h的代码,没有被编译并与项目的其余部分链接。
检查ToolsCPP.cc是否包含在您的项目中,并确认它确实正在编译中。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 检查哪个对象调用了另一个对象的对象方法
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 从 Base 引用对象调用派生类的成员
- 为什么为未删除的对象调用析构函数?
- Qt c++不会为所有对象调用move_slot.为什么?
- 使用在堆栈上创建的对象调用虚拟函数
- 使用基类对象调用Dervied Class函数
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 从类中的对象调用类中的函数的最佳方法
- 派生对象调用的 Base 方法的模板推导
- 如何使用单个对象调用具有相同名称的两个类函数
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- 如何对动态数组中的某些对象调用析构函数
- 如何从列表中存储的对象调用成员函数
- 从线程内的对象调用静态方法
- 从成员对象调用方法
- 当包含它的对象调用其析构函数时,unique_ptr是否未分配
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值