将struct返回为void

时间:2011-07-14 14:55:21

标签: c++ structure

我有一个返回void数据的函数。我需要将它作为结构接收。 例如。说一个结构widget_data。一个函数Ge​​tObjectData(),它返回一个void数据。

widget_data *wd=GetObjectData();

GetObjectData()返回sd->data

其中sd是结构,数据属于void类型。

当我编译它时,我收到错误消息,如

invalid conversion from void* to widget_data*

4 个答案:

答案 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。如果那是不可能的,你必须提出一些检查返回类型的自定义方法。