构造并结合在一起

时间:2019-03-02 11:57:16

标签: c pointers linked-list

我有以下代码。

struct Node {
  struct Node *next;
  char type[12];
  union {
    struct A *a;
  };
};

int main() {
  char *x[6];
  x[1] = "a";
  x[2] = "bc";
  x[3] = "bf";
  x[4] = "bd";
  x[5] = "ab";
  x[6] = "b";

  struct Node *new = (struct Node*) malloc(sizeof(struct Node));

  struct A*a = (struct A*) malloc(sizeof(struct A));
  *a->a = x[1];
  *a->b = x[2];
  *a->c = x[3];
  *a->d = x[4];
  new.a = a;
}

我正在尝试为a的每个属性赋予一个值,但我不断遇到如下错误。

struct or union expected at  //*a->c= x[3];//

我也尝试过

*a.c= x[3];
 a.c = x[3]

如何解决此错误?

2 个答案:

答案 0 :(得分:1)

表达式*a->c等于*(a->c)。那就是您试图取消引用c成员。

您收到的错误是因为a->c不是指针或数组。您不能在不是指针或数组的对象上使用取消引用运算符。

尝试解除对a->d的引用时,也会出现相同的错误。

您可能根本不应该在这里使用取消引用(即,您只需删除星号)。

答案 1 :(得分:0)

以下原因导致问题中显示的代码中的编译器错误:

  • 未完全定义sizeof(struct A)时使用struct A
  • a->a尚未完全定义的情况下,使用a->ba->ca->dstruct A
  • 使用new.a,因为newstruct Node *new中被声明为指针。

最后一个可能会产生问题中所述的错误消息,即结构或联合是期望的。问题所声明的行不会产生此消息a->c= x[3];,因为除->之外,该语句中没有使用任何期望结构或联合的运算符,char *x[6]; … x[6] = "b";可以正确接收指向结构的指针(尽管不完整)定义)。

因此,我怀疑问题中错误地报告了获取消息的代码或消息的位置。

此外,[6[是错误的;当使用MKMapView定义数组时,其有效索引从0到5,而不是6。