0

我无法理解为什么我会收到此代码的编译错误?如果有人澄清它会很有帮助。

int main()
{
  struct xx
  {
    int x;
    struct yy
   {
    int z;
    struct xx *p;
    };
   struct yy *q;
  };
}
4

3 回答 3

2

在 C 语言中,如果不立即引入数据字段,则不允许struct在其他类型中声明类型。struct即结构声明和数据字段声明应该在一个步骤中完成(作为一个声明)。您违反了该规则:您的定义无缘无故struct yy地位于定义内部。struct xx

要么将struct yy定义拉到 之外struct xx,要么确保该struct yy定义立即声明 的字段xx

例如,这实现了相同的意图,但正确执行

  struct xx
  {
    int x;
    struct yy
    {
      int z;
      struct xx *p;
    } *q; // `struct yy` definition is immediately used to declare field `q`
  };

但是,通常在 C 语言中没有理由创建嵌套结构定义。在同一级别定义结构通常是一个更好的主意,没有任何嵌套

struct yy
{
  int z;
  struct xx *p;
};

struct xx
{
  int x;
  struct yy *q;
};

你为什么不从一开始就这样做?以“嵌套”方式定义这些结构的意义何在?

于 2012-07-09T05:20:42.827 回答
0

;在声明中失踪了struct xx* p

  struct xx *p;
} *q
于 2012-07-09T05:14:55.780 回答
0

结构 yy 嵌套在结构 xx 中。因此,yy 的元素将通过结构 xx 的实例来访问,这需要知道 yy 的实例。如果实例是在定义结构之后创建的,编译器将不知道与 xx 相关的实例。因此对于嵌套结构 yy 你必须声明成员。

于 2012-07-09T05:16:07.713 回答