我有这样的代码,我不能将“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;
};