【问题标题】:Nested struct in C issueC问题中的嵌套结构
【发布时间】:2016-02-04 05:42:34
【问题描述】:

我在 C 中有一个结构声明,看起来像这样:

static struct {
   int a;
   int b;
} myStruct[10];

我想在myStruct中声明一个struct成员变量,所以我尝试添加这个:

static struct {
   int c;
   int d;
   struct myStruct[10] s;
} myNestedStruct[100];

我遇到了一堆错误,即syntax error before or at: [syntax requires ";" after last struct/union member。实现嵌套结构的更好方法是什么?

编辑:我的代码现在看起来像这样:

static struct {
   int a;
   int b;
} myStruct[10];

static struct {
   int c;
   int d;
   struct myStruct s[10];
} myNestedStruct[100];

但是我收到一个错误:incomplete struct/union/enum myStruct: s

【问题讨论】:

  • 在结构成员中使用“struct myStruct s[10]”。
  • 修改struct myStruct[10] s;struct myStruct s[10];
  • 第二个结构被稍微编辑添加它的名字myNestedStruct[100]。我进行了更改,但出现了一个错误,上面写着incomplete struct/union/enum myStruct: s
  • 两个结构都没有标签。在这两种情况下,您都将变量声明为匿名结构。

标签: c


【解决方案1】:

您需要先声明myStruct,然后才能将其用作结构类型。

struct myStruct {
    int a;
    int b;
};

static struct {
    int c;
    int d;
    struct myStruct s[10];
} myNestedStruct[100];

这会创建一个名为 myNestedStruct 的变量,它是一个由 100 个结构组成的数组,每个结构包含两个 ints 和一个由 10 个 mystructs 组成的数组。

【讨论】:

    【解决方案2】:

    当您编写类似的代码时 struct { ... } Foo;,它不是声明一个名为Foo类型,而是一个变量。它的类型是匿名的struct,对应于您在花括号中输入的内容。如果你想声明一个类型,写struct Foo { ... };

    这就是您的错误的来源——myStruct 不是类型名称,因此当您在 myNestedStruct 的定义中编写 struct myStruct 时,编译器认为您将要使用该名称定义一个结构。但随后它遇到了一个[,它不应该是结构声明中的下一个标记,所以它告诉你无法理解代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多