我有一个包含b2Body的包装类。
class Wrapper{
public:
b2Body *body
Wrapper(b2World &world){
//Create the b2Body
body->SetUserData(this);
}
}
现在b2Body有一个函数GetUserData()
,它返回void*
因为我知道void *必须是包装类型的事实,所以我尝试将其转换。
b2Body* bodies = world->GetBodyList();
while (bodies) {
if (bodies->GetUserData()!=NULL) {
Wrapper *wrapper = (Wrapper*)bodies->GetUserData();;
但无论我如何投射它,对象的实际成员都有不正确的值。
将void *强制转换为类类型的正确方法是什么,这样我才能得到正确的值?
编辑:我正在尝试执行本教程中描述的内容,但它不起作用。
http://www.iforce2d.net/b2dtut/user-data
我的“Wrapper”类的成员变量(相当于教程中的“Ball”)具有不正确的值。我也试过静态演员。
编辑:以下作品:
//setting and retrieving an integer
int myInt = 123;
body->SetUserData( (void*)myInt );
...later...
int udInt = (int)body->GetUserData();
但以下情况并非如此:
this->body->SetUserData((void*)this);
..later....
Wrapper *wrapper = (Wrapper*)(bodies->GetUserData());
同样,包装器的所有成员变量都是不正确的或NULL。即使Wrapper应该包含我们称之为GetUserData()的指针b2Body,我们通过wrapper-> body访问的b2Body也将其大部分成员设置为NULL。为什么会这样?
答案 0 :(得分:1)
您想尝试 reinterpret_cast<Wrapper*>
:
Wrapper* wrapper = reinterpret_cast<Wrapper*>(bodies->GetUserData());