宿題の二重リンクリストを作成しようとしています。ガイドラインとして、C byKyleLoudenによる本のマスタリングアルゴリズムを使用しています。この本には、使用しようとしているリストを使用する前に二重リンクリストを初期化する必要があると記載されていますが、コードを入力すると、VisualStudioは「次の行では不完全なタイプは許可されていません」と表示します。voiddlist_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