1

宿題の二重リンクリストを作成しようとしています。ガイドラインとして、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
4

1 に答える 1

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"のみが必要です。

投稿されたメインファイルには、中括弧と書式設定が含まれていませんでした。質問を編集して修正しました。

于 2012-10-07T02:01:34.407 に答える