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,而不是列表!!!!傻我。

4

3 回答 3

3

根据您的声明,list->footer您将 的内容分配给类型的。这只是工作中的类型安全,类型在任何方面都不兼容。list_elem*list->header->nextlist*

您可能打算将成员prevnextof声明list_elem为类型list_elem*而不是list*.

于 2013-05-30T13:30:32.347 回答
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;
};
于 2013-05-30T13:31:31.013 回答
1

list->footeris a struct list_elem *while list->header->nextis a struct list *,所以这些作业不起作用:

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

它们是不同的类型,因此它们确实不兼容。它看起来像你打算nextprev要成为struct list_elem *

于 2013-05-30T13:30:07.930 回答