Jem*_*Jem 1 c++ int casting objective-c void-pointers
我(尝试)在ObjC项目中编写一些(工作)C++ :-) C++库(Box2D)为我提供了一个b2Fixture类,它具有"用户数据"属性,供编码人员存储与他们相关的内容.
在我的例子中,它只需要存储一个整数.从我在ObjC中的主程序,一个是将整数转换为void*:
headFixture->SetUserData( (void*) 10 );
Run Code Online (Sandbox Code Playgroud)
在程序的C++方面的实用程序方法中,我想将用户数据与给定的整数进行比较(即它们是常数,10 =实地,11 =平台等).
第一次比较使用(void*)拒绝编译.在SO上找到了一种不同的方法,如第二次比较所示,它使用*((intptr_t*)...).那个编译,但它发送EXC_BAD_ACCESS:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == ( (void *) contact.fixtureA->GetUserData() )) ||
( type == *( (intptr_t *) contact.fixtureB->GetUserData() ))
) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我已经没有想法来解决这个问题了.请帮忙:-)谢谢!J.
编辑/解决方案:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == (intptr_t) contact.fixtureA->GetUserData() ) ||
( type == (intptr_t) contact.fixtureB->GetUserData() )
) {
return true;
};
return false;
}
Run Code Online (Sandbox Code Playgroud)
这个对我有用!
我不确切地知道你要做什么,但你可能应该将数据转换回你想要的类型:
if (( type == reinterpret_cast<int>(contact.fixtureA->GetUserData() )) ||
( type == reinterpret_cast<int>(contact.fixtureB->GetUserData() ))
) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3397 次 |
| 最近记录: |