将结构返回为空

Return struct as void

本文关键字:返回 结构      更新时间:2023-10-16

我有一个返回 void 数据的函数。我需要将其作为一个结构接收。例如。说一个结构widget_data。一个返回 void 数据的函数 GetObjectData((。

widget_data *wd=GetObjectData();

GetObjectData()返回sd->data.

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

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

invalid conversion from void* to widget_data*

static_cast可以将void*转换为指向特定类型的指针:

widget_data* wd = static_cast<widget_data*>( yourVoidPointer );
widget_data *wd=(widget_data *)GetObjectData();

widget_data *wd=reinterpret_cast<widget_data *>(GetObjectData());

让我们先澄清一下。 void没有任何意义,因此您不能拥有 void 类型的数据。因此,如果函数返回void则不可能返回任何数据。现在,void *是一个空白指针。您可以将其视为指向某处的内存地址。它可能指向任何类型的数据,甚至无处可去。如果你非常确定你的函数返回一个指向widget_data对象的指针,那么你可以做一个reinterpret_cast。例如:

widget_data *wd = reinterpret_cast<widget_data *> (GetObjectData ());

如果您不确定,则必须检查返回的数据类型。如果启用了 RTTI(默认情况下通常启用它(,并且基类至少有一个虚拟方法,则这可能是可能的。然后你可以使用dynamic_cast。如果无法做到这一点,则必须提出一些检查返回类型的自定义方法。

这是

有效的 C,但不是有效的C++。 您需要在C++中进行显式强制转换,例如

widget_data *wd = static_cast<widget_data *>(GetObjectData());