C++/SDL'void*'不是点对象类型

zan*_*ona 2 c++ pointers sdl object void

我是C++的新手,我正在尝试使用C++和SDL进行一些测试,而在SDL中我们有一个函数:

SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param);
Run Code Online (Sandbox Code Playgroud)

我可以为创建的计时器传递回调.但很显然它转换我的实例为*无效,所以我不能再在其上是静态的更新方法检索,这是有趣的,但在SDL_AddTime不会在非静态回调函数工作.

好了,所以我的问题是,试图调用公共方法通过无效*PARAM争论它抱怨不是一个指针到对象类型渲染时...

有没有办法我可以在更新方法中再次获取Character实例,因为我无法控制SDL_AddTime函数,我必须传递所需的参数?

谢谢

#include "Character.h"

Character::Character(void)
{
  timer = SDL_AddTimer(33, update, this);
  this->render(); // is called without problem
}

//static method
Uint32 Character::update(Uint32 interval,void* param)
{
  param->render(); // yields: 'void*' is not a pointer-to-object type;

  SDL_Event event;

  event.type = SDL_USEREVENT;
  event.user.code = 1020;
  event.user.data1 = param;

  SDL_PushEvent(&event);

  return interval;
}

void Character::render(void)
{
  printf("rendering character \n");
}
Run Code Online (Sandbox Code Playgroud)

小智 5

你不需要reinterpret_cast - static_cast应该没问题:

Character * cp = static_cast <Character *>( param );
Run Code Online (Sandbox Code Playgroud)

你应该避免reinterpret_cast - 它几乎总是特定于实现,并且可能隐藏问题 - 就像旧式的C模型一样.