Что действительно “запрашивает на участника '*******' в чем-то не структура или объединение”, среднее?

Существует ли легкое объяснение того, что означает эта ошибка?

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

Я встречался с ним несколько раз во время, когда я изучал C, но у меня нет подсказки относительно того, что это означает.

75
задан timrau 14 August 2012 в 23:55
поделиться

2 ответа

Это также происходит, если вы пытаетесь получить доступ к экземпляру, когда у вас есть указатель, и наоборот:

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. Указатели важны, не прячьте звездочки. Пусть они сияют.

112
ответ дан 24 November 2019 в 11:38
поделиться

Вы пытаетесь получить доступ к члену структуры, но не к структуре. Например:

struct {
    int a;
    int b;
} foo;
int fum;
fum.d = 5;
17
ответ дан 24 November 2019 в 11:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: