无效使用未定义类型'struct book_implementation'

时间:2015-03-23 15:17:56

标签: c struct header-files typedef

由于以下错误而编译我的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 个答案:

答案 0 :(得分:0)

book在您的主要例程中是不完整的类型。您无法在其上使用sizeof