ポインタについて – プログラミング – Home

通知
すべてクリア

[解決済] ポインタについて


そら
 そら
(@そら)
ゲスト
結合: 25年前
投稿: 8
Topic starter  

自己参照型の構造体を使って動的に確保したいのですが
(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;


引用未解決
トピックタグ
EMI
 EMI
(@EMI)
ゲスト
結合: 25年前
投稿: 5
 

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;


返信引用
そら
 そら
(@そら)
ゲスト
結合: 25年前
投稿: 8
Topic starter  

EMIさん ご説明ありがとうございました。
CとC++の構造体は違うところがあるんですね。
以後 気をつけて取り組みたいです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました