我定义了这个结构
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。
提前致谢。
答案 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;
};