0

リンクされたリストにファイルを読み込むことになっているコードのチャンクがここにあります:

void loadFile() {
    Event *event;
    FILE *file;
    int nRead = 7;
    char filename[30];
    LinkedList *list;

    list = (LinkedList*)malloc(sizeof(LinkedList));
    event = (Event*)malloc(sizeof(Event));

    printf("Please input filename\n");
    scanf("%s", filename);
    file = fopen(filename, "r");

    nRead = fscanf(file, "%d-%d-%d %d:%d %d %s", &(list->head->event->date->year), &(list->head->event->date->month), &(list->head->event->date->day), &(list->head->event->time->hours), &(list->head->event->time->minutes), &(list->head->event->duration), event->name);

    if(nRead != 7) {
        printf("Error in reading file.\n");
    }

    fclose(file);
}

ここにメインの一部があります

int main(int argc, char **argv) { 
  Window *window;
  Event *event;
    FILE *file;

    window = createWindow("Calendar");

    if(argc == 2) {
        file = fopen(argv[1], "r");
            if(file == NULL) {
                printf("Could not open file.\n");
            } else {
                    printf("File opened successfully!\n");
                }
    }
    else {
    addButton(window, "Load a calendar from file.", *loadFile(), &event); //ERROR HERE
    }
}

ここにaddButtonがあります(機能を知る必要はありません。構文のヘルプが必要です)

void addButton(Window *window, char *label, void (*callback)(void*), void *data);

エラーが発生します:

assignment.c: In function ‘main’:
assignment.c:22: error: void value not ignored as it ought to be

理由が本当にわからず、この部分で立ち往生しています。周りを見回したところ、変数などにvoid戻り値を持つ関数を割り当てると、void値が無視されないというエラーが発生することがわかりましたが、コードでそれを行っているとは思いません...

何か助けていただければ幸いです

4

1 に答える 1

1

コードを次のように変更します。

addButton(window, "Load a calendar from file.", loadFile, &event);

*loadFile()実際にloadFile関数を呼び出してから、戻り値を逆参照しようとしますvoid。あなたが意図したことは、関数へのポインタを渡すことでした。

addButtonは を期待しているため、まだわずかな問題がありvoid (*callback)(void*)ます。 つまりvoid*、単一のパラメーターを持つ void 関数を渡す必要があります。しかしloadFile、一致しません。これを修正するloadFileには、パラメーターを受け入れるように宣言する必要がありvoid*ます。

void loadFile( void *data ) {
    /* etc... */
}
于 2013-11-06T03:16:38.053 に答える