所以我试图构建一个 B 树,使用两种类型的节点,单独的关键节点 (kNode) 和包含基于订单大小的多个 kNode 的 super 节点 (sibNode)。我一直遇到的问题是,要使此设置正常工作,我需要 sibNode 中的 kNode 指针(例如 pkey 和 smallestPnt)以及 kNode 中的 sibNode 指针(例如 nxtkey 和 child)。但是,无论我先放哪个 typedef,都会为这些指针返回错误未知类型(按此顺序返回的示例:错误:未知类型名称'kNode')。如果有人可以就如何避免此错误给我一些建议,我们将不胜感激。
typedef int keyT;
//B-Tree Node typdef
typedef struct
{
int size;
int cursor;
kNode* pkey;
kNode* smallestPnt;
}sibNode;
//key Node typedef
typedef struct
{
keyT* key;
sibNode* nxtkey;
sibNode* child;
}kNode;
最佳答案
当定义了sibNode
类型时,还没有定义kNode
类型。
像这样使用前向声明:
struct kNode; //this is forward declaration
typedef struct
{
int size;
int cursor;
struct kNode* pkey; //here
struct kNode* smallestPnt; //here
}sibNode;
typedef struct kNode //and here
{
keyT* key;
sibNode* nxtkey;
sibNode* child;
}kNode;
关于C 类型定义冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926587/