質問
私はこの構造
を定義しました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つの異なるタイプがあります。そのようにそれを書く:
typedef struct UNIAO_NOME
{
int vert;
struct UNIAO_NOME *Pai; // refers to this type
} un;
. 他のヒント
struct un
を定義することはなく、un
の型を参照する識別子struct
(struct UNIAO_NOME
なし)だけです。
struct un*
の使用は、実際にはstruct un
の暗黙の「転送宣言」です。コンパイラの場合、これは、そのような定義されていない構造へのポインタがどれだけ大きくなるかを推測するのに十分です。
そのような種類の頭痛に使用できるIDIOMは、一般的な宣言のすべての構造体を一般的な宣言に一般的な宣言にすることです:
typedef struct un un;
.
前方DEC ^^^^^^^^^^^^^
タイプ別名---------------- ^^
struct un
{
int vert;
un *Pai;
};
. 所属していません StackOverflow