0

基本的に 3 つのレベルの構造体があるバイナリ ツリーを作成しました。

typedef struct l {
  char n[15];
  struct l *next;
} List;

typedef struct {
  char rname[20];
  char lname[20];
  List number;
} info;

typedef struct tree {
  info thisnode;
  struct tree *left;
  struct tree *right;
} Tree;

そして、このコード行で

 t->thisnode.number = t->thisnode.number.next;

タイトルに記載されているエラーが表示されます

通常、再帰的なデータ構造では、次の型が struct *l であるにもかかわらず、これらの型の代入が機能します。この場合、なぜ機能しないのか、誰かが私を助けてくれますか?

また、私は本能的に上記の行を

 t->thisnode.number = t->thisnode.number->next;

しかし、私のコンパイラはそれをあまり好まないようです。

4

2 に答える 2

0

まあ、型は確かに互換性がありません。

inのnextフィールドの型numberは ですが、 instruct l *の型はです。これは のエイリアスです。つまり、単なるポインタではなく、構造体全体です。したがって、ポインタを構造体全体に代入しようとしていますが、これは飛びません。numberinfoListstruct l

ポインター レベルが欠落しているようです。おそらくnumberフィールドinfoList *?

于 2013-01-07T13:37:45.917 に答える
0

t->thisnode.numberは型List(つまりstruct l)t->thisnode.number->nextですが、型struct l *(ポインター アクセス構文を使用して非ポインター メンバーにアクセスするときに実際にコンパイルされた場合) です。

于 2013-01-07T13:38:36.210 に答える