我无法理解为什么我会收到此代码的编译错误?如果有人澄清它会很有帮助。
int main()
{
struct xx
{
int x;
struct yy
{
int z;
struct xx *p;
};
struct yy *q;
};
}
我无法理解为什么我会收到此代码的编译错误?如果有人澄清它会很有帮助。
int main()
{
struct xx
{
int x;
struct yy
{
int z;
struct xx *p;
};
struct yy *q;
};
}
在 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;
};
你为什么不从一开始就这样做?以“嵌套”方式定义这些结构的意义何在?
你;
在声明中失踪了struct xx* p
。
struct xx *p;
} *q
结构 yy 嵌套在结构 xx 中。因此,yy 的元素将通过结构 xx 的实例来访问,这需要知道 yy 的实例。如果实例是在定义结构之后创建的,编译器将不知道与 xx 相关的实例。因此对于嵌套结构 yy 你必须声明成员。