我有一个返回void数据的函数。我需要将它作为结构接收。 例如。说一个结构widget_data。一个函数GetObjectData(),它返回一个void数据。
widget_data *wd=GetObjectData();
和GetObjectData()
返回sd->data
。
其中sd
是结构,数据属于void
类型。
当我编译它时,我收到错误消息,如
invalid conversion from void* to widget_data*
答案 0 :(得分:6)
static_cast
可以将void*
转换为指向特定类型的指针:
widget_data* wd = static_cast<widget_data*>( yourVoidPointer );
答案 1 :(得分:3)
widget_data *wd=(widget_data *)GetObjectData();
或
widget_data *wd=reinterpret_cast<widget_data *>(GetObjectData());
答案 2 :(得分:1)
这是有效的C,但不是有效的C ++。您需要在C ++中使用显式强制转换,例如
widget_data *wd = static_cast<widget_data *>(GetObjectData());
答案 3 :(得分:1)
让我们先澄清一下事情。 void
没有任何意义,因此您无法获得void类型的数据。因此,如果函数返回void
,则无法返回任何数据。现在,void *
是一个void指针。您可以将其视为指向某处的内存地址。它可能指向任何类型的数据,甚至无处可寻。如果您非常确定函数返回指向widget_data
对象的指针,那么您可以执行reinterpret_cast。例如:
widget_data *wd = reinterpret_cast<widget_data *> (GetObjectData ());
如果您不确定,则必须检查返回的数据类型。如果启用了RTTI(通常默认启用),并且基类至少有一个虚方法,那么这可能是可能的。然后你可以使用dynamic_cast。如果那是不可能的,你必须提出一些检查返回类型的自定义方法。