gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:38:13 26 4
gpt4 key购买 nike

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

SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param);

我可以为创建的计时器传递回调。但显然它将我的实例 this 转换为 *void,因此我无法在静态的更新方法上再次检索它,这很有趣,但 SDL_AddTime 不适用于非静态回调函数。

好吧,所以我的问题是,当尝试通过 void* param 参数调用公共(public)方法渲染时,它提示不是指向对象类型的指针...

由于我无法控制 SDL_AddTime 函数并且必须传递所需的参数,有什么方法可以在更新方法中再次获取 Character 实例?

谢谢

#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");
}

最佳答案

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

Character * cp = static_cast <Character *>( param );

您应该避免 reinterpret_cast - 它几乎总是特定于实现,并且可能隐藏问题 - 就像旧式 C 类型转换一样。

关于C++/SDL 'void*' 不是点对对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com