2014-03-25 94 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];