2010-08-16 4 views
1

это, вероятно, простое решение, я не знаком с C просто пытаются портировать мои Java структуры данных присвоений C.точки в качестве параметров функции 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; } УЗЕЛ; '? –

+0

да, thats решена последняя часть моей проблемы, спасибо – Kyle

+0

В этом коде есть еще одна проблема. 'NODE * head' в основной функции может указывать на любую точку, а также является параметром' add_first() '. Так как 'add_first()' читает главу 'head-> next', это вызовет ошибку сегментации. – czchen

ответ

4

Вам нужно переместить определение вашей структуры над функцией to_screen. Компилятор говорит, что он не знает, что такое NODE.

+0

Спасибо, все. – Kyle

1

Вам нужно определить, прежде чем УЗЕЛ это используемый. Переместите определение в начало.

0

Вам нужно переместить этот блок на верх, как рекомендуют другие рекомендации.

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

Вы можете попросить причину. Причина в том, что спецификация языка C не похожа на Java. Так что это виды компиляции сверху вниз. Итак, если он видит что-то неопределенное, оно будет искать определение выше этой точки, и если оно увидит определение, которое оно получит. Он не выглядит ниже строки кода

+0

Речь идет не о том, что компилятор умный или немой. Речь идет о однократном или многопроходном режиме. –

+1

Речь идет о спецификации языка *, а не о компиляторе. – strager

+0

Ops, ок. Я не знаю об этом. Я всегда обвиняю компилятор – vodkhang

Смежные вопросы