2010-08-16 35 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