2014-03-25 97 views
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等..)

任何人都可以帮助我吗?如果你需要更多的信息,我会尽力把它添加进去。

回答

0

我自己解决了。如果有人面临同样的问题,我改变了我的addSubview方法:

[impl->obj addSubview:(UIView *) view->impl->obj];