2010-08-16 80 views
1

這可能是一個簡單的解決辦法,我不是熟悉C只是想端口我的Java數據結構分配到C.點作爲函數的參數ç

這是我收到的錯誤:

測試.C:4:錯誤:預期之前 ')' '*' 令牌

test.c的:11:錯誤:預期 ')' 之前, '*' 令牌

#include <stdio.h> 
#include <stdlib.h> 

void to_screen(NODE *cur){ 
    while(cur->next != NULL){ 
     printf("%d\n", cur->data); 
     cur = cur->next; 
    } 
} 

void add_first(NODE *head, int data){ 
    NODE *cur; 
    int i; 

    for(i=0; i<10; i++){ 
     cur = malloc(sizeof(NODE)); 
     cur->data = data; 
     cur->next = (*head).next; 

     head->next = cur; 
    } 
} 

typedef struct node{ 
    int data; 
    struct element *next; 
}NODE; 


int main(){ 
    int i; 
    NODE *head; 

    for(i=0; i<10; i++){ 
     add_first(head, i); 
    } 

    to_screen(head); 
} 
+1

除了將typedef移動到頂端,不應該讀爲:'typedef struct node {int data; struct node * next; }節點;'? – 2010-08-16 02:53:49

+0

是的,這解決了我的問題的最後一部分,謝謝 – Kyle 2010-08-16 02:56:35

+0

此代碼還有另一個問題。 main函數中的NODE * head可能指向任何地方,它也是'add_first()'的參數。由於'add_first()'通過'head-> next'讀取頭部,所以會導致分段錯誤。 – czchen 2010-08-16 03:08:12

回答

4

您需要將結構的定義移到to_screen函數的上方。編譯器說它不知道NODE是什麼。

+0

謝謝,就是這樣。 – Kyle 2010-08-16 02:56:51

1

您需要定義NODE它是 用過的。將定義移到頂部。

0

您需要將此塊移到頂端,其他2個答案建議。

typedef struct node{ 
    int data; 
    struct element *next; 
}NODE; 

您可能會問這個問題。原因是C語言規範不像Java。所以它從頂部到底部進行編譯。所以,如果它看到一些未定義的東西,它會在這點之上尋找定義,並且如果它看到了它的定義。它不會看下面的代碼行

+0

這不是關於編譯器是聰明還是愚蠢的。這是關於單傳還是多傳。 – 2010-08-16 02:56:49

+1

這是關於*語言規範*而不是編譯器。 – strager 2010-08-16 03:03:32

+0

行動,好的。我不知道這一點。我總是責怪編譯器 – vodkhang 2010-08-16 03:14:17