我正在嘗試爲我們的組項目實現二叉樹。首先是一些代碼。碰撞的結構定義
二叉樹結構:
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