Недопустимое использование неопределенного типа 'struct book_implementation'

У меня проблема с компиляцией кода C из-за таких ошибок, как:

"недопустимое использование неопределенного типа" struct book_implementation ""

а также

"недопустимое применение 'sizeof' к неполному типу 'book' b = (book *) malloc (DEFAULTBOOKS * sizeof (book));"

Я создал структуру и методы, используя ее в отдельном C-файле с соответствующим заголовочным файлом, как показано ниже.

#include <stdio.h>
#include <stdlib.h>
#include "books.h"

struct book_implementation {
    int bookid;
    int amount; 
    int total;
};

//Set book IDs to books. 
void setbook( book *b, long i, generator gen){
    b->bookid = i;
    b->total = (long)gen;
    b->amount = b->total;
}

Заголовочный файл:

#ifndef BOOKS_H
#define BOOKS_H


typedef struct book_implementation book; 
typedef long (*generator)();
void setbook        (book *b, long i, generator gen);
#endif

Вот область основной программы, где присутствует ошибка:

#include <stdio.h>
#include <stdlib.h>
#include "books.h"

#define DEFAULTBOOKS 100

long bookgen(){

    return (rand()%DEFAULTBOOKS)+1;
}

main(){
    book *b;

    b = (book *) malloc (DEFAULTBOOKS * sizeof (book));

    for(i=0; i < DEFAULTBOOKS; i++)
        setbook(&b[i], i, bookgen);
}

Я искал проблему, но, кажется, ничто не решает проблему, может кто-нибудь помочь?

Спасибо!

1 ответ

book это неполный тип в вашей основной рутине. Вы не можете использовать sizeof в теме.

Другие вопросы по тегам