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等..)
任何人都可以幫助我嗎?如果你需要更多的信息,我會盡力把它添加進去。