我有一个要添加到我的 iphone 项目中的 C++ 库。
在一个头文件中我声明
@interface a
{
cppvirtualclass V;
}
对于具有 Release 设置的 iPhone 设备,这编译得很好。但是,无论有没有调试信息,它都拒绝为模拟器编译。
它给出了错误
error: type 'V' has virtual member functions.
有没有办法解决这个问题,还是我必须只定义具体的 C++ 类?
我有一个要添加到我的 iphone 项目中的 C++ 库。
在一个头文件中我声明
@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)
此外,Objective-C++ 不再是 iPhone 开发允许的语言(根据 4.0)。您可以使用 Objective-C、C 和 C++,但不能使用 Objective-C++。