Вернуть структуру как void - PullRequest
3 голосов
/ 14 июля 2011

У меня есть функция, которая возвращает пустые данные.И мне нужно получить его как структуру.например.скажем структура widget_data.функция GetObjectData (), которая возвращает недействительные данные.

widget_data *wd=GetObjectData();

и GetObjectData() возвращает sd->data.

, где sd - структура, данные имеют тип void.

, когда я компилирую его, я получаю сообщение об ошибке типа

invalid conversion from void* to widget_data*

Ответы [ 4 ]

6 голосов
/ 14 июля 2011

static_cast может конвертировать void* в указатель на определенный тип:

widget_data* wd = static_cast<widget_data*>( yourVoidPointer );
3 голосов
/ 14 июля 2011
widget_data *wd=(widget_data *)GetObjectData();

или

widget_data *wd=reinterpret_cast<widget_data *>(GetObjectData());
1 голос
/ 14 июля 2011

Давайте сначала немного проясним ситуацию.void ничего не значит, поэтому вы не можете иметь данные типа void.Таким образом, если функция возвращает void, то is не может вернуть какие-либо данные.Теперь void * является указателем void.Вы можете рассматривать это как адрес памяти, указывающий куда-то.Это может быть указание на любой тип данных или даже нигде.Если вы уверены, что ваша функция возвращает указатель на объект widget_data, тогда вы можете сделать reinterpret_cast .Например:

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

Если вы не уверены, вам нужно проверить тип возвращаемых данных.Это может быть возможно, если включен RTTI (обычно он включен по умолчанию) и базовый класс имеет хотя бы один виртуальный метод.Тогда вы можете использовать dynamic_cast .Если это невозможно, вам нужно придумать какой-то особый способ проверки типа возвращаемого значения.

1 голос
/ 14 июля 2011

Это действительный C, но не действительный C ++.Вам нужно явное приведение в C ++, например

widget_data *wd = static_cast<widget_data *>(GetObjectData());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...