试图将节点类型转换为链接列表

时间:2018-02-27 00:43:33

标签: c casting linked-list

我有一个双向链表数据结构,该链表中的每个节点都是另一个链表。 我试图在程序中稍后将节点强制转换为链接列表,但收到错误:

error: conversion to non-scalar type requested

我所知道的是因为我试图将类型转换为一个不允许的结构。 对于与此类似的事情,会有什么工作?

List toPass = (List)(iter->data);

我已经尝试创建新的List并手动将iter->数据中的所有值设置为结构项但我收到同样的错误。

编辑: 初始化列表功能:

List initializeList(char* (*printFunction)(void* toBePrinted),void (*deleteFunction)(void* toBeDeleted),int (*compareFunction)(const void* first,const void* second)) {
    List tmpList;

    tmpList.head = NULL;
    tmpList.tail = NULL;
    tmpList.deleteData = deleteFunction;
    tmpList.compare = compareFunction;
    tmpList.printData = printFunction;
    tmpList.length = 0;

    return tmpList;
}

节点功能:

Node* initializeNode(void* data) {
    Node* tmpNode;

    tmpNode = (Node*)malloc(sizeof(Node));

    if (tmpNode == NULL){
        return NULL;
    }

    tmpNode->data = data;
    tmpNode->previous = NULL;
    tmpNode->next = NULL;

    return tmpNode;
}

此时如果要测试,只需创建一个列表列表,然后尝试将节点类型转换为列表。

编辑:

标题结构

列表:

typedef struct listHead{
    Node* head;
    Node* tail;
    int length;
    void (*deleteData)(void* toBeDeleted);
    int (*compare)(const void* first,const void* second);
    char* (*printData)(void* toBePrinted);
} List;

节点:

typedef struct listNode{
    void* data;
    struct listNode* previous;
    struct listNode* next;
} Node;

1 个答案:

答案 0 :(得分:0)

我想你想做的就像是 典型的双链表实现:

typedef struct list {
    List *prev, *next;
} List;
typedef struct entry {
    List *list;
    List *another link; /* your another dlist here */
    void *my_real_data; /* you store your data here */
    /* ... */
}