如何转换box2d返回的void指针?

时间:2014-06-18 09:29:53

标签: c++ box2d

我有一个包含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。为什么会这样?

1 个答案:

答案 0 :(得分:1)

您想尝试 reinterpret_cast<Wrapper*>

Wrapper* wrapper = reinterpret_cast<Wrapper*>(bodies->GetUserData());