typedef struct treeNodeListCell {
treeNode *node;
struct treeNodeListCell *next;
}treeNodeListCell;
typedef struct treeNode{
imgPos position;
treeNodeListCell *next_possible_positions;
}treeNode;
typedef struct segment{
treeNode *root;
}Segment;
我对上面结构的前向声明感到很困惑,使用当前声明的方式是什么?
答案 0 :(得分:1)
因此,从您的示例代码中,我了解您希望typedef
的<{1>} 和使用struct
您需要转发声明。最直接(原文如此)的方式是这样的:
typedef struct treeNode treeNode;
typedef struct treeNodeListCell treeNodeListCell;
typedef struct segment segment;
struct treeNodeListCell {
treeNode *node;
treeNodeListCell *next;
};
struct treeNode {
imgPos position;
treeNodeListCell *next_possible_positions;
};
struct segment {
treeNode *root;
};
使用比c11更旧的标准时要小心。在这种情况下,不允许重复typedef
,因此不同标头中的任何前向声明必须如下所示
struct treeNode;
然后使用struct treeNode
代替treeNode
来引用类型。
使用c11,此限制最终消失,如果定义的类型相同,您可以重复typedef
。
答案 1 :(得分:0)
你应该写
typedef struct treeNodeListCell {
struct treeNode *node;
^^^^^^^^^^^^^^^
struct treeNodeListCell *next;
}treeNodeListCell;
在这种情况下,类型名称struct treeNode
是前向声明的。
如果声明如下
typedef struct treeNodeListCell {
treeNode *node;
^^^^^^^^
struct treeNodeListCell *next;
}treeNodeListCell;
然后编译器无法知道treeNode
的含义。