1. ホーム
  2. c

[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?

2022-01-31 19:58:06

質問

このエラーの意味を簡単に説明することはできますか?

request for member '*******' in something not a structure or union

C言語を勉強している間に何度か遭遇したことがあるが、どういう意味なのかさっぱりわからない。

どのように解決するのですか?

また、ポインタを持っているときにインスタンスにアクセスしようとしたり、その逆の場合も起こります。

struct foo
{
  int x, y, z;
};

struct foo a, *b = &a;

b.x = 12;  /* This will generate the error, should be b->x or (*b).x */

コメントで指摘されているように、誰かが typedef はポインタ、すなわち * のように、typedefに記述します。

typedef struct foo* Foo;

なぜなら、そうすると、以下のようなコードになるからです。 見た目 インスタンスを扱っているようで、実はポインターを扱っている。

Foo a_foo = get_a_brand_new_foo();
a_foo->field = FANTASTIC_VALUE;

と書くべきかのように見えることに注意してください。 a_foo.field しかし、それは失敗します。 Foo は構造体へのポインタです。そこで、私は に対して typedef ポインタは重要です。アスタリスクを隠さないでください。ポインターは重要だ、アスタリスクを隠すな、輝かせろ。