分配不兼容的变量类型?

时间:2013-11-15 21:09:42

标签: c xcode5

我定义了这个结构

typedef  struct UNIAO_NOME
{
     int vert;
     struct un *Pai; 
} un;

然后,当我尝试

int name (un *conj/*pointer to a subset*/)
{
    un c;/*subset*/ 
    c = *conj;
    while (c.Pai != NULL)
        c = *(c.Pai);
    return c.vert;
}

编辑说

c = *(c.Pai); 

错误,但c的类型为un。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您有两种不同的类型 - 在struct内,您已声明了新类型un 。写得像这样:

typedef struct UNIAO_NOME
{
     int vert;
     struct UNIAO_NOME *Pai;    // refers to this type
} un;

答案 1 :(得分:1)

您永远不会定义struct un,而只会定义引用un类型的标识struct(不含struct UNIAO_NOME)。

使用struct un*实际上是一个隐含的"前向声明" struct un。对于编译器来说,这足以推断出指向这种尚未定义的结构的指针的大小。

可以用于此类头痛的习语是typedef所有结构之前完整声明:

typedef struct un un;

前进dec ^^^^^^^^^^^^ 别名------------------ ^^

struct un
{
     int vert;
     un *Pai; 
};