c - 结构定义冲突

标签 c data-structures

我正在尝试为我们的小组项目实现一个二叉树。首先是一些代码。

二叉树结构:

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;

tB​​STNodePtr.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/

相关文章:

c - 初始化结构中的指针数组时是否需要花括号?

algorithm - 具有高效查找缺失的一组键的数据结构

swift - 如何在 Swift 中实现管理 UserDefaults 的键值对的通用结构?

c - 如何在 C 中的链表中实现数组

c - avcodec_decode_video2 在线程函数中返回值 -1094995529

c - c中的固定长度字符串数组

c - 在数据类型之间使用 c 语言进行类型转换

java - PriorityQueue 在删除元素时更改顺序

C - 字符串中出现奇怪的字符

java - 适当存储对象以方便查找(Java)