Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 非法强制转换:来自struct';套接字日志数据';至';无符号整数';数据_C++_Struct_Casting_Parameter Passing_Typecasting Operator - Fatal编程技术网

C++ 非法强制转换:来自struct';套接字日志数据';至';无符号整数';数据

C++ 非法强制转换:来自struct';套接字日志数据';至';无符号整数';数据,c++,struct,casting,parameter-passing,typecasting-operator,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;

我有一个函数
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();
}
我该如何解决这个问题

相关查询在此发布:-

不能将结构传递给需要整数的函数!该函数将如何处理它(假设您成功地将其通过肮脏的黑客攻击)


函数将如何处理它?

您试图转换的结构的大小大于UINT32。此外,不能像这样将结构强制转换为int(无论大小)。我猜您要做的是强制转换结构socket\u log\u数据的UINT16成员,如下所示:

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

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

    getchar();
}

希望这有帮助

您应该从所有结构中删除
typedef
s。这是一个古老的用法,从C,它不应该在C++中使用。