2015-06-03 2 views
1

Я создал следующий связанный список:-структуруВозвращение связанного списка из-структуру функции C

struct node { 
    struct data *data; 
    struct node *next; 
}; 

Моя проблема заключается в том, что, когда я пытаюсь создать функцию, которая возвращает этот связанный список-структуру, я м получаю следующее сообщение об ошибке:

"Conflicting types for 'function'". 

Моя функция выглядит следующим образом:

struct list_node *function(location piece){ 
    struct list_node *details; 
    details = malloc(sizeof(struct list_node)); 
    details->next = NULL; 
    details->current = NULL; 
    if (global_var == WHITE_M){ 
      struct list_node *temp; 
      temp = malloc(sizeof(struct list_node)); 
      data new_data; 
      *temp->data = new_data; 
      temp->next = malloc(sizeof(struct list_node)); 
      temp->next = details; 
      details = temp; 
     } 
return details; 
} 

на самом деле ш hat, который я пытаюсь сделать в своей функции, - это создать новый связанный список, затем подключить к нему новые узлы и вернуть связанный список.

Любая возвращаемая фраза, которую я пробовал, и извращение объявления, которое я пробовал, привело меня к той же ошибке, может ли кто-нибудь помочь мне?

+3

определение функции соответствует ли заявление? Показать объявление. –

+1

Ваша первая структура называется 'node'. Ваша функция возвращает 'list_node *' –

+1

Вы определяете/объявляете свою функцию перед ее использованием? Большинство (все?) Компиляторы дадут вам неявный тип функции, а затем жалуются, что типы не совпадают. – Degustaf

ответ

4

У вас есть дополнительная фигурная скобка в конце инструкции if. Возврат не находится в функции.

+0

Возможно, вы имели в виду «скобки» вместо «скобки»? – limitlessinfinity

+0

Спасибо. На самом деле я имел в виду фигурные скобки. :-) Отредактировано. – Joe

0

Это просто ошибка, которую я совершил при копировании функции здесь, в моем коде состояние возврата правильно установлено, и у меня все еще есть такая же проблема. Я исправил проблему в исходном сообщении.

0

Возможно, вы пытаетесь использовать функцию до ее объявления. Например, предположим, что у вас есть:

int func1() 
{ 
    prinft("%d\n", func2()); 
} 

double func2() 
{ 
    return 1.0; 
} 

Если вы не создавали function prototype для «func2», то компилятор предполагает, что функция имеет целочисленный тип возвращаемого значения. Конечно, на самом деле это не так, но поскольку компилятор не видел func2() до его вызова, он делает неверное предположение о типе возврата. В вашем коде вы можете вызвать функцию «function» до, которую вы определили. Вы можете исправить это с помощью прототипа функции, которая в основном способ сообщить компилятору, какие функции ожидать:

//Function prototypes 
int func1(); 
double func2(); 

int func1() 
{ 
    prinft("%d\n", func2()); 
} 

double func2() 
{ 
    return 1.0; 
} 

Также смотрите: conflicting types error when compiling c program using gcc

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