C ++ C样式转换指针指针

时间:2013-11-05 13:47:20

标签: c++ c pointers

这是我尝试表示我遇到的一个简单问题:

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方法,还有什么方法可以达到我的目的吗?

1 个答案:

答案 0 :(得分:-1)

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

StaticObject renderable;
void *pointerToObject = &renderable;
Renderable* test1 = (Renderable*)pointerToObject;     // invalid pointer
StaticObject *test2 = (StaticObject*)pointerToObject; // okay