为什么强制转换编译失败?

时间:2011-10-12 13:36:43

标签: c

struct AAA
{
    char a_1;
    int a_2;
};

struct BBB
{
    char b_1;
    int b_2;
};


int main(void)
{
    struct AAA a1 = {2, 4};
    struct BBB b1;
    b1 = (struct BBB)a1;
    return 0;
}

如上所示,“b1 =(struct BBB)a1;”使complie说“错误:转换为请求的非标量类型”。 struct AAA和struct BBB具有相同类型的成员,为什么强制转换失败?

谢谢

2 个答案:

答案 0 :(得分:6)

您无法在C中投放struct,如果您确实需要将memcpy复制到a1,请使用b1

memcpy(&b1, &a1, sizeof(a1));

答案 1 :(得分:5)

在C标准中(查看N1256,因为它是免费提供的)

6.5.4定义了Cast运算符。

6.5.4.2列出了对施法者的限制:

  

除非类型名称指定void类型,否则类型名称应为   指定限定或不合格的标量类型和操作数   有标量类型。

6.2.5.21将标量和聚合类型描述为:

  

算术类型和指针类型统称为标量类型。数组和   结构类型统称为聚合类型.37)

结构类型因此绝对不是标量类型,这意味着不满足对转换运算符的约束。因此,代码失败。