2011-09-18 51 views
1

我想在C中編寫一個鏈表程序,但是我不斷從不兼容的指針類型警告/錯誤獲取初始化。我如何擺脫這一點?你能解釋什麼是錯的嗎?下面是一個簡化版本我的程序:如何從不兼容的指針類型警告/錯誤中擺脫此初始化?

typedef struct node 
{ 
int contents; 
struct Node *nextNode; 
} Node; 

int main(void) 
{ 
//.......Other code here...... 
    Node *rootNode = (Node *) malloc(sizeof(Node)); 
    rootNode->nextNode = NULL; 
//.......Other code here...... 
    addNode(rootNode); 
}  

addNode(Node *currentNode) 
{ 
//.....Other code here.... 
    Node *nextNode = (currentNode->nextNode); //Error on this line 
// ....Other code here... 
} 

感謝

+2

鑄造malloc不讚賞C.如果你必須這樣做,永遠不要忘記添加stdlib.h –

回答

5

我想你想struct node *struct node沒有struct Node *

typedef struct node 
{ 
    int contents; 
    struct node *nextNode; /* here */ 
} Node; 

不要從malloc將返回值,這是不需要的。

+0

良好的捕獲。如果這解決了它@ user950891,那麼你必須有一個'struct Node',它在你的代碼中也是不同的。你應該檢查你的命名約定。對我來說,最簡單的是始終具有與'struct'標籤相同的'typedef'標識符。如果你有'typedef struct Node Node;'在第一次聲明時編譯器會更好地識別你的錯誤。 –

+0

@Jens:不一定。 user950891的原始'struct'會自行編譯。我不能引用標準中的章節和詩句來證明它的正確性,但'gcc-Wall'對此感到滿意。 –

+0

啊是的,這是一個指向不透明'struct'的指針。 –

相關問題