在C

时间:2017-02-19 09:01:27

标签: c

//data type 1
typedef struct t_A{
    int mJ;
}A;

//data type 2        
typedef struct t_B{
    int mK;
}B;

//Function returning B object which is a rValue
B funcRetB(void)
{
    B test;
    test.mK = 9;
    return test;
}

void main(void)
{
    A a;
    a = (A)funcRetB(); //How to typecast this without defining a variable of B?
}

上面的代码给出了错误     "错误C2440:'输入' :无法转换为' B'到' A'"。 是否可以在C中解决此错误?

1 个答案:

答案 0 :(得分:0)

我相信,但无法在标准中快速找到它,typedef引入了一种只与自身兼容的新类型。

虽然A和B的定义相同,但编译器会将它们视为不同的类型。当函数返回类型B的完整对象时,编译器现在不知道如何将它复制到类型A的对象。因为复制对象,所以演员不会工作,因为就编译器而言,所有成员可能会有不同的布局,因此编译器不知道如何将对象复制到另一个。

请参阅评论中提供的链接以获取提示和技巧。