我正在尝试为我们的小组项目实现一个二叉树。首先是一些代码。
二叉树结构:
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;
这里是 malloc,其中 foo 是 tVariable_Prom
类型:
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.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
最佳答案
您可以使用前向声明。
struct tVariable_Prom;
typedef struct tBSTNode
{
string *Key;
tVariable_Prom *BSTNodeCont;
struct tBSTNode * LPtr;
struct tBSTNode * RPtr;
} tBSTNodePtr;
反之亦然。并且(可选)将它们放在两个不同的标题中。
关于c - 结构定义冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472374/