1
我使用使用pimpl的Wrapper-Class,因此我可以在使用C++时使用Objective-C方法。将封装类转换为原始类
现在在我的ViewWrapper.hpp我有这样的:
class ViewWrapper
{
public:
void addSubview(ViewWrapper *view); //method exists in original View.h (Objective-C)
ViewWrapper (void);
~ViewWrapper (void);
private:
struct Impl;
Impl* impl;
};
在我ViewWrapper.mm:
//ViewWrapper.mm
#import "ViewWrapper.hpp"
#import "View.h" // original Objective-C header
struct ViewWrapper::Impl
{
View* obj;
};
ViewWrapper::ViewWrapper() : impl(new Impl)
{
impl->obj = [[View alloc] init];
}
void ViewWrapper::addSubview(ViewWrapper *view)
{
[impl->obj addSubview:(View *) view]; // <- here is the error
}
在我的main.cpp
现在我用这样的:
// main.cpp
ViewWrapper *wrapper1 = new ViewWrapper();
ViewWrapper *wrapper2 = new ViewWrapper();
wrapper1->addSubview(wrapper2);
现在,当我尝试编译它时,我收到错误消息
“主题1:EXC_BAD_ACCESS(代码= 2,地址= 0x105)” 在我的ViewWrapper.mm
我想我的问题是,这是不是铸造ViewWrapper查看的正确途径。任何其他方法工作得很好(例如const char *到NSString等..)
任何人都可以帮助我吗?如果你需要更多的信息,我会尽力把它添加进去。