我有这样的代码,我不能将“struct node”放在“struct mnode”之上,所以我将它声明在顶部,如下所示。
但是编译器说字段 n 的类型不完整。
如何正确声明顶部的结构?
struct node;
struct mnode{
int j;
node n;
};
struct node{
int k;
};
对于类类型的类成员,您需要一个定义。声明是不行的。所以在这种情况下, 的完整定义node
必须在 之前mnode
。
前向声明仅在不需要完整定义时才起作用——指针或引用成员、返回类型或方法参数。
编译器抱怨是因为它需要知道一些mnode
它需要更多信息的事情node
。首先,它需要知道mnode
对象的大小才能构造它,但为此它需要知道 a 的大小node
。它还需要知道如何生成以下函数:
为此,它需要node
. 我可能忘记了别的东西,但你可以看到它需要对node
很多事情的完整定义。所以不,事先声明是行不通的。
如果您出于某种原因无法提供 的完整定义node
,则可以求助于将 的类型更改n
为,例如, a node*
。编译器具有指针的所有信息,因此没有问题。
那是因为node
……不完整。在结构/类定义中不能有不完整类型的字段。但是你可以有一个指向节点的指针,因为指针的大小是已知的:
struct node;
struct mnode{
int j;
node* n;
};
struct node{
int k;
};