2013-05-30 3 views
0

Я знаю, что другие люди отправили ту же ошибку, но я не могу найти ничего похожего на мое. Я попытался реализовать некоторые из решений, но не могу понять, почему он не работает.Почему предупреждение: назначение из несовместимого типа указателя?

struct list_elem { 
     int value; 
    struct list *prev; 
    struct list *next; 
}; 

struct list{ 
    struct list_elem *header; 
    struct list_elem *footer; 
}; 

struct list_elem *list_elem_malloc(void) { 
    struct list_elem *elem; 
    elem = malloc(sizeof(struct list_elem)); 

    return elem; 
} 

void list_init(struct list *list) { 
    list->header = list_elem_malloc(); 
    list->footer = list_elem_malloc(); 

    list->header->prev = NULL; 
    list->footer->next = NULL; 
    list->header->next = list->footer; //ERROR on this line 
    list->footer->prev = list->header; //same ERROR on this line 
} 

Почему ошибка?

Я сделал опечатку в struct list_elem, prev и next должен быть list_elems, а не списки !!!! Дурак я.

+0

Indeeed, я typo'd! .. спасибо, конечно, не видел этого :) – cxzp

ответ

2

Вы смешиваетесь между struct list и struct list_elem.

Похоже, вам просто нужно изменить:

struct list_elem { 
    int value; 
    struct list *prev; 
    struct list *next; 
}; 

к:

struct list_elem { 
    int value; 
    struct list_elem *prev; 
    struct list_elem *next; 
}; 
+2

Спасибо .... будет принимать ваш ответ через 10 минут, когда смогу. – cxzp

1

list->footer является struct list_elem * в то время как list->header->next является struct list *, поэтому эти задания не будут работать:

list->header->next = list->footer; //ERROR on this line 
list->footer->prev = list->header; //same ERROR on this line 

Это разные типы, и поэтому они действительно не совместимы. Похоже, вы намеревались next и prev быть struct list_elem *.

3

Вы назначая содержимое list->footer, что является list_elem* согласно вашей декларации, в list->header->next, который имеет тип list*. Это просто безопасность типа на работе, типы несовместимы.

Вы, вероятно, намеревался объявить членов prev и next из list_elem как тип list_elem* вместо list*.

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