次のような構造体がある場合:
typedef struct bag {
int test;
} *bag;
次に、関数がバッグを消費する場合。まあ言ってみれば:
int sample(bag *b) {
b->test ...
}
構造体でも共用体でもないメンバー 'b' を要求したというエラーが表示されます。これを修正するにはどうすればよいですか? b を a (struct bag *) にキャストできましたが、それは不合理に思えます。
bag
type を typeへのポインタとして定義しましたstruct bag
。したがって、 typebag *b
の変数を作成すると、実質的に type の変数が作成されますstruct bag**
。引数を に変更するかbag b
、メンバー ( (*b)->test
) に対して二重逆参照を実行します。
編集
別のポスターが述べたように、おそらくあなたは を意味していtypedef struct bag { ... } bag
たので、元のコードはコンパイルされます。
決定する必要があります: bag は構造体へのポインターの名前であるか、bag は構造体の名前です: おそらくあなたが意図したものです
typedef struct bag {
int test;
} bag;
次に、コードがコンパイルされます。