0

这是我试图代表我遇到的一个简单问题:

Renderable* test1 = *(Renderable**) pointerToObject;
StaticObject* test2 = *(StaticObject**) pointerToObject;
test1->setTransparency(0.5f); // Crash here.
test2->setTransparency(0.75f); // Works here.

pointerToObjecttype 是void*但在它内部实际上指向指向对象的指针(如Renderable**)。 Renderable是一个抽象类,StaticObject是一个实现Renderable. 编译时,程序在test1->set()方法上崩溃,但与test2->set().

是否可以在不知道的情况下从中获取有效test1对象?pointerToObjectStaticObject

编辑 这就是我存储这个指针的方式:

StaticObject** udata = (StaticObject**) lua_newuserdata(state, sizeof(StaticObject*));
*udata = object;

object是指向 的指针StaticObject。我刚刚注意到sizeof(StaticObject*)这可能是我的问题的原因。方法文档在这里:lua_newuserdata. 还有什么方法可以在不修改lua_newuserdata方法的情况下实现我想要的吗?

4

1 回答 1

-1

对象的类型是什么renderable?通常,如果将指针转换为 a void*(不需要强制转换),则必须将其转换回其原始类型(需要强制转换)才能使用它。所以如果类型renderableStaticObject,使用test1是无效的。

StaticObject renderable;
void *pointerToObject = &renderable;
Renderable* test1 = (Renderable*)pointerToObject;     // invalid pointer
StaticObject *test2 = (StaticObject*)pointerToObject; // okay
于 2013-11-05T13:51:15.760 回答