C 结构声明
我在C语言中声明结构时遇到问题。 我需要创建一个具有ConnectionNode和connection node数组的NetworkNode,您知道这会导致错误: 错误:“目标”字段的类型不完整C 结构声明,c,struct,structure,C,Struct,Structure,我在C语言中声明结构时遇到问题。 我需要创建一个具有ConnectionNode和connection node数组的NetworkNode,您知道这会导致错误: 错误:“目标”字段的类型不完整 struct NetworkNode; struct ConnectionNode { char* name; //pointer 2 bytes struct NetworkNode *target; //pointer 2 byte
struct NetworkNode;
struct ConnectionNode
{
char* name; //pointer 2 bytes
struct NetworkNode *target; //pointer 2 bytes
}; //total 4 bytes reserved
这个问题的解决方案是什么
顺便说一句,代码如下:
struct ConnectionNode
{
char* name;
struct NetworkNode target;
};
typedef struct ConnectionNode ConnectionObject;
struct NetworkNode
{
char* name;
int i;
struct ConnectionNode connections[10];
};
typedef struct NetworkNode NetworkObject;
在程序的最开始部分,为
NetworkNode
添加前向声明:
struct NetworkNode;
这使编译器能够理解什么是NetworkNode
,并打破在ConnectionNode
定义中需要提及的第22条军规,反之亦然
更新:
此外,您还需要更改ConnectionNode的定义:
...
struct NetworkNode target;
...
要改用指针,请执行以下操作:
struct NetworkNode *target;
若并没有这一点,编译器将不知道要为NetworkNode分配多少内存(即使使用前向声明)。另一方面,指针总是具有相同的大小。我不确定,但尝试在这里使用指针,并通过在使用之前声明结构来进行前向引用。将指针添加到结构
NetworkNode
(例如*target),以便编译器为引用NetworkNode
结构的指针保留2字节的内存。但当您声明struct NetworkNode target
时,编译器不知道其大小,并抛出错误“complete type”
当你喜欢的时候
struct NetworkNode;
struct ConnectionNode
{
char* name; //pointer 2 bytes
struct NetworkNode target; //unknown size of target as it is not YET defined
}; //total size: unknown (error: incomplete type)
如果你打字
struct NetworkNode target;
编译器必须知道结构的大小,才能为目标分配足够的内存
通常人们会使用
struct NetworkNode *target;
引用另一个对象(使用单独的malloc),这可以作为转发声明来完成
您的申报存在以下问题:
struct ConnectionNode {
struct NetworkNode target;
}
struct NetworkNode {
struct ConnectionNode connection;
}
编译器无法计算struct NetworkNode类型的一个对象的大小。我刚才这样做了,但这不是解决方案。我仍然有错误。他没有使用指针@彼得米尔:是的,你说得对-谢谢!我更新了我的答案,提到了这一点。我试图避免使用指针,但这似乎是不可能的。无论如何,在改变指针的类型和修复我的一些函数之后,一切都正常了!感谢开头的帮助
typedef struct NetworkNode NetworkObject
。然后稍后声明该结构。您可能需要查看:[转发声明C struct][1][1]: