这是我尝试表示我遇到的一个简单问题:
Renderable* test1 = *(Renderable**) pointerToObject;
StaticObject* test2 = *(StaticObject**) pointerToObject;
test1->setTransparency(0.5f); // Crash here.
test2->setTransparency(0.75f); // Works here.
pointerToObject
类型为void*
,但实际上它指向对象的指针(如Renderable**
)。
Renderable
是一个抽象类,StaticObject
是实现Renderable
的子类。
编译时,程序在test1->set()
方法崩溃,但与test2->set()
一起使用。
是否可以在不知道test1
的情况下从pointerToObject
获取有效的StaticObject
个对象?
修改 这就是我存储这个指针的方式:
StaticObject** udata = (StaticObject**) lua_newuserdata(state, sizeof(StaticObject*));
*udata = object;
object
是指向StaticObject
的指针。我刚刚注意到sizeof(StaticObject*)
这可能是我遇到问题的原因。有关methdod的文档位于:lua_newuserdata
。如果不修改lua_newuserdata
方法,还有什么方法可以达到我的目的吗?
答案 0 :(得分:-1)
renderable
对象的类型是什么?通常,如果将指针转换为void*
(不需要执行此操作),则必须将其转换回原始类型(需要强制转换)才能使用它。因此,如果renderable
的类型为StaticObject
,则使用test1
无效。
StaticObject renderable;
void *pointerToObject = &renderable;
Renderable* test1 = (Renderable*)pointerToObject; // invalid pointer
StaticObject *test2 = (StaticObject*)pointerToObject; // okay