2014-09-19 155 views
0

所以我試圖構造一個B樹,使用兩種類型的節點,單個關鍵節點(kNode)和包含基於順序大小(sibNode)的k個節點數量的超級節點。我一直遇到的問題是,爲了這個設置工作,我需要sibNode中的kNode指針(例如,pkey和smallestPnt)以及kNode中的sibNode指針(例如,nxtkey和child)。不管我首先放哪個typedef,都會返回這些指針的錯誤未知類型(例如按照以下順序返回:error:unknown type name'kNode')。如果有人可以給我一些關於如何避免這個錯誤的建議,將不勝感激。C typedef衝突

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; 

回答

4

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; 
+2

+1,並且值得注意的是,東方電氣'結構kNode獨立前行;'是可選的。將兩個成員更改爲'struct kNode *'並正確地標記預期的結構將做到這一點。 – WhozCraig 2014-09-19 05:04:32