2014-09-19 2 views
0

Так что я пытаюсь построить B-Tree, используя два типа узлов, отдельные узлы ключей (kNode) и суперузел, содержащий число kNodes на основе размера заказа (sibNode). Проблема, с которой я сталкиваюсь, заключается в том, что для этой настройки для работы мне нужны указатели kNode в sibNode (например, pkey и smallestPnt), а также указатели sibNode в kNode (например, nxtkey и child). Какой бы тип typedef я не помещал сначала, но возвращает тип неизвестного типа для этих указателей (пример в этом порядке возвращает: error: неизвестное имя типа 'kNode'). Если бы кто-нибудь мог дать мне несколько советов о том, как избежать этой ошибки, которая была бы оценена.C typedef confliction

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, и стоит отметить, независимый вперед Децл 'STRUCT KNode;' является необязательным. Это приведет к изменению двух элементов в 'struct kNode *' и правильной маркировке предполагаемой структуры. – WhozCraig