使用Visual Studios 2010初始化C中的双向链表时遇到问题

时间:2012-10-07 01:27:32

标签: c

我正在尝试为家庭作业创建一个双向链表。我正在使用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

1 个答案:

答案 0 :(得分:0)

你的头文件中有一个递归混乱。

  1. 您的主文件只需#include "dlinklist.h"。该标题包括其他标题。
  2. dlinklist.h包含了错误的包含警卫名称。 DLINKLIST_H不是DLIST_H
  3. dlistelmt.h根本不需要包含行。
  4. dlist.h只需要#include "dlistelmt.h",因为它在声明中使用它。
  5. dlistdata.h只需要`#include“dlist.h”,因为它在声明中使用它。
  6. 您发布的主文件缺少一些花括号和格式。我刚编辑了你的问题以解决它。