对于这个错误的含义有简单的解释吗?

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 */

正如评论中指出的,如果有人去,这可能会变得令人痛苦typedefs 一个指针,即包括*在 typedef 中,如下所示:

typedef struct foo* Foo;

因为这样你就会得到代码看起来就像它处理实例一样,但实际上它处理的是指针:

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

请注意上面的内容看起来应该如何写a_foo.field,但这会失败,因为Foo是一个指向结构体的指针。against typedef:ed C 中的指针。指针很重要,不要隐藏你的星号。

来自: stackoverflow.com