C++ C++风格指针指向指针

C++ C++风格指针指向指针,c++,c,pointers,C++,C,Pointers,以下是我试图表达的一个简单问题: 可渲染*test1=*可渲染**指针对象; StaticObject*test2=*StaticObject**pointerToObject; test1->setTransparency0.5f;//在这里坠毁。 test2->setTransparency0.75f;//在这里工作。 pointerToObject类型为void*,但在其内部实际上指向指向对象的指针,如Renderable**。 Renderable是一个抽象类,StaticObject是

以下是我试图表达的一个简单问题:

可渲染*test1=*可渲染**指针对象; StaticObject*test2=*StaticObject**pointerToObject; test1->setTransparency0.5f;//在这里坠毁。 test2->setTransparency0.75f;//在这里工作。 pointerToObject类型为void*,但在其内部实际上指向指向对象的指针,如Renderable**。 Renderable是一个抽象类,StaticObject是实现Renderable的子类。 编译时,程序在test1->set方法上崩溃,但在test2->set方法下工作

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

编辑 以下是我存储此指针的方式:

StaticObject** udata = (StaticObject**) lua_newuserdata(state, sizeof(StaticObject*));
*udata = object;
对象是指向StaticObject的指针。我刚刚注意到sizeofStaticObject*这可能是我的问题的原因。methdod的文档位于此处:。在不修改lua_newuserdata方法的情况下,还有什么方法可以实现我想要的吗?

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

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

OP已经说过Renderable是一个抽象类,StaticObject是一个实现Renderable的子类。@starrify-他没有说Renderable对象的类型是什么,尽管它似乎在最近的编辑中消失了。可能还涉及其他类型,当您使用强制转换进行指针转换时,了解确切的类型至关重要。你读过我所说的指针转换吗?可能setTransparency没有在Renderable中定义,没有主体,pointerToObject不是指向StaticObject的有效指针?请提供更多信息:setTransparency是在Renderable中实现的还是只是一个虚函数?是的。它是在头文件中实现的,如下所示:virtual void setTransparencyfloat value{transparency_=value;}Handwaving不能替代编译和运行并显示问题的实际代码。@SMGhost-是的,总是这样。你的工作是把它简化成你可以发布的可管理的东西。几乎总是这样,这样做将引导您找到解决方案,而无需发布任何内容。