【问题标题】:illegal cast: from struct 'socket_log_data' to 'unsigned int' data非法转换:从 struct 'socket_log_data' 到 'unsigned int' 数据
【发布时间】:2016-02-22 14:39:14
【问题描述】:

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

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

这里是代码 sn-p:-

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'

【问题讨论】:

  • 您应该从所有结构中删除typedefs。这是 C 保留下来的古老用法,不应该在 C++ 中使用。

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


【解决方案1】:

您不能将结构传递给需要整数的函数!该函数会用它做什么(假设你设法通过肮脏的黑客来投射它)。

函数将如何处理它?

【讨论】:

    【解决方案2】:

    您尝试转换的结构的大小比 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();
    }
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2014-04-05
      • 2012-05-06
      • 2012-04-28
      • 1970-01-01
      • 2013-09-03
      • 2013-05-16
      • 2021-01-02
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多