我正在尝试为家庭作业创建一个双向链表。我正在使用Kyle Louden的C语言编写算法作为指导。该书指出我需要在使用之前初始化双链表,我正在尝试做但是当我输入我的代码时,visual studio告诉我“不允许以下行的类型”void dlist_init(Dlist * list, void(* destroy)(void * data)){}“,它还声明Dlist是未定义的,但是根据我的理解,这不是要定义的变量。我对此非常新,所以我可能完全错了。如果您有任何问题,请告诉我。完整的代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "bool.h"
#include "dlinklist.h"
#include "DlistElmt.h"
#include "Dlist.h"
#include "dlistdata.h"
/**************************************************************************************************/
int main(int argc, char* argv[])
{
FILE* ifp, *ofp;
//char outputFilename[] = argv[2];
int hour, min;
int* list;
float temp;
if(argc != 3) /* argc should be 3 for correct execution */
{
/* We print argv[0] assuming it is the program name */
printf("usage: %s filename", argv[0]);
}
else
{
// We assume argv[1] is a filename to open
ifp = fopen(argv[1], "r");
if(ifp == 0)
{
printf("Could not open file\n");
}
else
{
ofp = fopen(argv[2], "w");
}
}
}
void dlist_init(Dlist* list, void (*destroy)(void* data))
{
list->size = 0;
list->destroy = destroy;
list->head = NULL;
list->tail = NULL;
return;
}
我还有以下标题:
dlinklist.h
/**************************************************************************************************/
#ifndef DLIST_H
#define DLIST_H
#include <stdlib.h>
#include "DlistElmt.h"
#include "Dlist.h"
#include "Dlistdata.h"
/**************************************************************************************************/
#endif
Dlist.h
/**************************************************************************************************/
#ifndef DLIST_H
#define DLIST_H
#include <stdlib.h>
#include "dlinklist.h"
#include "DlistElmt.h"
#include "Dlistdata.h"
/**************************************************************************************************/
typedef struct Dlist_ {
int size;
int (*match)(const void *key1, const void *key2);
void (*destroy)(void *data);
DlistElmt *head;
DlistElmt *tail;
} Dlist;
#endi
dlistdata.h
/**************************************************************************************************/
#ifndef DLISTDATA_H;
#define DLISTDATA_H;
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "dlinklist.h"
#include "DlistElmt.h"
#include "Dlist.h"
/**************************************************************************************************/
void dlist_init(Dlist *list, void (*destroy)(void *data));
#endif
DlistElmt.h
/**************************************************************************************************/
#ifndef DLISTELMT_H
#define DLISTELMT_H
#include <stdlib.h>
#include "dlinklist.h"
#include "Dlist.h"
#include "Dlistdata.h"
/**************************************************************************************************/
typedef struct DlistElmt_ {
void *data;
struct DlistElmt_ *prev;
struct DlistElmt_ *next;
} DlistElmt;
/**************************************************************************************************/
#endif
答案 0 :(得分:0)
你的头文件中有一个递归混乱。
#include "dlinklist.h"
。该标题包括其他标题。dlinklist.h
包含了错误的包含警卫名称。 DLINKLIST_H
不是DLIST_H
。dlistelmt.h
根本不需要包含行。dlist.h
只需要#include "dlistelmt.h"
,因为它在声明中使用它。dlistdata.h
只需要`#include“dlist.h”,因为它在声明中使用它。您发布的主文件缺少一些花括号和格式。我刚编辑了你的问题以解决它。