我有一个双向链表数据结构,该链表中的每个节点都是另一个链表。 我试图在程序中稍后将节点强制转换为链接列表,但收到错误:
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;
答案 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 */
/* ... */
}