Существует ли легкое объяснение того, что означает эта ошибка?
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 */
Как указано в комментарии, это может быть мучительно, если кто-то пойдет и наберёт указатель
- это указатель, i. e. включает *
в typedef, типа так:
typedef struct foo* Foo;
Потому что тогда вы получите код, который выглядит как будто он работает со случаями, когда на самом деле он работает с указателями:
Foo a_foo = get_a_brand_new_foo();
a_foo->field = FANTASTIC_VALUE;
Обратите внимание на то, как это выглядит, будто это должно быть написано a_foo.field
, но это будет неудачным, так как Foo
является указателем для структурирования. Я настоятельно рекомендую против typedef
:ed указатели в C. Указатели важны, не прячьте звездочки. Пусть они сияют.
Вы пытаетесь получить доступ к члену структуры, но не к структуре. Например:
struct {
int a;
int b;
} foo;
int fum;
fum.d = 5;