非法转换:从struct'socket_log_data'到'unsigned int'数据

时间:2016-02-22 14:39:14

标签: c++ struct casting parameter-passing typecasting-operator

我有一个函数logEthernetConnection(),它以整数作为参数。 但是,要求建议我将结构传递给它。 我在传递时对结构进行了类型化处理,但我得到了标题中提到的错误: -

 error (dplus:1061): illegal cast: from 'socket_log_data' to 'unsigned int'

以下是代码段: -

typedef struct fields
{
    UINT16 loss_reason : 1;
    UINT16 unused : 15;
} FIELDS;

typedef union fields_union
{
    UINT16 all_fields;
    FIELDS ref_fields;
    fields_union() : all_fields(0), ref_fields() {}
} FIELDS_UNION;

typedef struct socket_log_data
{
    FIELDS_UNION ref_fields_union;
    UINT16 socket_number;
    socket_log_data() : socket_number(0), ref_fields_union() {}
} SOCKET_LOG_DATA;

int logEthernetConnection(UINT32 data)
{
    return data;
}
void main()
{
    UINT32 data = logEthernetConnection((UINT32)socket_log_data);
    getchar();
}

我该如何解决这个问题?

相关查询发布在这里: - Error: illegal cast: from 'int' to 'union'

2 个答案:

答案 0 :(得分:1)

您不能将结构传递给需要整数的函数!函数会做什么(假设,你设法通过肮脏的hackery抛出它)。

该功能如何处理它?<​​/ p>

答案 1 :(得分:-1)

您尝试投射的结构尺寸大于UINT32。而且,你不能把这样的结构转换为int(无论大小)。我想你想要做的是投射一个结构socket_log_data的UINT16成员,如:

 void main()
{
    socket_log_data my_var_struct;
    // Fill the my_var_struct

    UINT32 data = logEthernetConnection( (UINT32) my_var_struct.socket_number);

    getchar();
}

希望这有帮助!