我正在尝试为我们的组项目实现二叉树。首先是一些代码。碰撞的结构定义
二叉树结构:
typedef struct tBSTNode
{
string *Key;
tVariable_Prom *BSTNodeCont;
struct tBSTNode * LPtr;
struct tBSTNode * RPtr;
} tBSTNodePtr;
树(* BSTNodeCont)的数据是这样的:
typedef struct Variable_Prom {
int TYPE;
double DOUBLE;
int INTEGER;
bool BOOL;
string *StringProm;
} tVariable_Prom;
但我也需要指针数组存储一些二进制树节点中一些特殊情况...
所以我想这条线添加到我的数据结构中:
tBSNodePtr *pointer;
然后malloc它到自定义数组大小。但是在这里我遇到了一个问题,因为我的第一个结构需要在当时定义第二个结构,而且我的第二个结构需要首先定义第一个结构(因为它正在使用它)。
是否有一些头结构功能?还是有一个简单的解决方案,我没有看到我的问题?
编辑:下面的问题的信息。 我在我的.c文件中包含了一个头文件,该文件中包含另一个头文件,这个定义好像在工作。
struct tVariable_Prom;
typedef struct tBSTNode
{
string*Key;
struct tVariable_Prom *BSTNodeCont;
struct tBSTNode * LPtr;
struct tBSTNode * RPtr;
} tBSTNodePtr;
typedef struct Variable_Prom {
int Typ;
double DoUbLe;
int InTeGer;
bool BoOl;
string *StringProm;
struct tBSTNode *pointer;
} tVariable_Prom;
这里就是foo是tVariable_Prom
型的malloc:
foo.pointer = malloc(2 * sizeof(tBSTNodePtr));
和由节点密钥(Tstr
)搜索二叉树的函数返回地址就成功节点(odkaz3
):
BSTSearch(&odkaz3, *strom, &Tstr);
然后我试图分配一个地址的另一个节点,它是由另一个功能,但实际上是问题有:
odkaz3->BSTNodeCont->pointer[0] = *odkaz2;
EDIT2:好的,我开始重新阅读的内容,你对我说,我现在有2个文件 tVariable_Prom.h:
struct tBSTNodePtr;
typedef struct Variable_Prom {
int Typ;
double DoUbLe;
int InTeGer;
bool BoOl;
string *StringProm;
tBSTNodePtr *pointer;
} tVariable_Prom;
tBSTNodePtr.h:
struct tVariable_Prom;
typedef struct tBSTNode {
string *Key;
tVariable_Prom *BSTNodeCont;
struct tBSTNode * LPtr;
struct tBSTNode * RPtr;
} tBSTNodePtr;
我将parser.h中包含的两个头文件包含在parser.c中,但现在我确实得到这些错误:
tBSTNodePtr.h:5:2: error: unknown type name tVariable_Prom
和在线与odkaz4->BSTNodeCont->pointer[1] = *odkaz3;
:
parser.c request for member 'pointer' in something not a structure or union
编译器抱怨一个不完整的类型,因为它没有找到类型定义,而只是一个前向声明。不知何故,您不包括相关类型的标题。 –
我已经编辑了代码,如你所说,但我仍然遇到错误。 – 4yoms5n3