2013-12-12 128 views
1
struct t_Node 
{ 
    Element info; 
    struct t_Node* next; 
}; 

我不斷收到這個錯誤,當我嘗試編譯時,可以有任何一個請求解釋我爲什麼,我該如何解決它? 該錯誤出現在下面的代碼中。錯誤:解除引用指向不完整類型的指針。

Node* createNode(Element e) 
{ 
    Node* node = (Node*) malloc(sizeof(struct t_Node)); 
    if(node == NULL) 
     return NULL; 

    (*node)->info = e; // here 
    (*node)->next = NULL; // and here 
    return node; 
}; 
+1

你能否發佈'Element'的定義 – jev

+0

什麼是'Node'? Node的定義在哪裏? – AnT

回答

2

當您嘗試將某些東西寫入編譯器不理解的結構中時,會發生該錯誤。

從您顯示的片段中,您已經定義了t_node,但是您使用的結構爲createNode,名爲Node

也許你需要添加一個typedef?

struct t_Node 
{ 
    Element info; 
    struct t_Node* next; 
}; 
typedef struct t_Node Node; 
+1

謝謝! typedef struct t_Node * Node; 這是我的問題 – user3097346

1

假設您忘記在這裏寫入typedef聲明(但是您在代碼中寫入),則語法中存在另一個錯誤。

node->info = e; // here 
node->next = NULL; // and here 

(*node).info = e; // here 
(*node).next = NULL; // and here 

是正確的。

其中x是一個指針:

x->y becomes (*x).y so it is like you have written (*(*node)).info and (*(*node)).next 

在你的代碼(這是錯誤的)。

0

真實這裏的問題是,你正在做以下幾點:

(*node)->info = e; // here 
(*node)->next = NULL; // and here 

它應是:

(*node).info = e; 
(*node).next = NULL; 

node->info = e; 
node->next = NULL; 

您應該看一看如何正確使用指針。

另一個問題是您使用的結構名爲Node_t,然後另一個節點。 但是從你的錯誤我敢打賭你已經使用了typedef並沒有顯示它。

相關問題