我有一个 C++ 库,我想添加到我的 iphone 项目中。
在一个头文件中声明
@interface a
{
cppvirtualclass V;
}
对于具有 Release 设置的 iPhone 设备,这可以很好地编译。但是,无论有无调试信息,它都拒绝为模拟器编译。
报错
error: type 'V' has virtual member functions.
有没有办法解决这个问题,还是我必须只定义具体的 C++ 类?
最佳答案
默认情况下,Objective C 在创建 Objective C 对象时不会在 C++ 实例变量上运行构造函数。这意味着(我认为)C++ 对象的 vtable 将无法正确初始化。
尝试使您的实例变量成为指针并在 init 方法中分配它(并在 dealloc/finalize 中销毁它)。
或者
尝试在目标代码生成设置中设置“在 Ovjective-C 中调用 C++ 默认 Ctors/Dtors”。
(GCC_OBJC_CALL_CXX_CDTORS,-fobjc-call-cxx-cdtors)
关于c++ - Objective-C++ 为 iPhone 编译,但不是模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606705/