我使用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);
现在当我尝试编译它时,我收到错误消息
&#34;线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x105)&#34;在我的ViewWrapper.mm
中
我想我的问题是,这不是将ViewWrapper强制转换为View的正确方法。任何其他方法都可以正常工作(例如,const char *到NSString,依此类推......)
任何人都可以帮助我吗?如果您需要更多信息,我会尝试尽可能地添加它。
答案 0 :(得分:0)
我自己解决了。如果有人遇到同样的问题,我改变了我的addSubview方法:
[impl->obj addSubview:(UIView *) view->impl->obj];