2011-09-18 18 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 nodestruct 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'へのポインタです。 –

関連する問題