通知
すべてクリア
Topic starter
2000年5月23日 6:26 PM
自己参照型の構造体を使って動的に確保したいのですが
(C++ではなくC言語を使っています)
★印の部分が何故エラーになるのかわかりません。
左辺、右辺とも同じ型なのにどうしてエラーになるのでしょうか?
typedef struct {
int i;
struct Data *pNext;
} Data;
Data *p;
Data *w;
p = ( Data *) malloc ( sizeof( Data ) );
p->i = 100;
p->pNext = NULL;
w = ( Data *) malloc( sizeof( Data ) );
p->pNext = w; /* ★エラー★ */
w->i = 200;
2000年5月23日 7:33 PM
Cだということで、
struct Dataという型が定義されてないからです。
wはData型のポインタですが、p->pNextは(未定義の型である)struct Data型のポインタであり、
型の不整合が起きるためエラーになります。
typedef文で定義されてるのは、iとpNextという2つのメンバを持つ『無名構造体』の別名であり、
struct Dataという型はこの時点では定義されていません。
これは、次のようにすれば解決します。
struct _Data{
int i;
struct _Data *pNext;
};
typedef struct _Data Data;
Topic starter
2000年5月24日 9:04 AM
EMIさん ご説明ありがとうございました。
CとC++の構造体は違うところがあるんですね。
以後 気をつけて取り組みたいです。