2013-06-28 39 views
0

我正在尝试从位图文件中读取头文件。当我编译时,我得到以下错误; “bmp_header_p = bmp-> header”的行中的“错误:赋值中的不兼容类型”。我在这里做错了什么?为什么我会遇到错误:分配中的不兼容类型?

struct _bmpfile { 
    bmp_header_t header; 
    bmp_dib_v3_header_t dib; 

    rgb_pixel_t **pixels; 
    rgb_pixel_t *colors; 
}; 

typedef struct _bmpfile bmpfile_t; 

bool 
bmp_get_header_from_file(FILE *filename, bmpfile_t *bmp) 
{ 
     bmp_header_t *bmp_header_p; 
     bmp_header_p = bmp->header; 

     fseek(filename, 0L, SEEK_SET); 
     bmp_header_p = malloc(sizeof(bmp->header)); 

     if(14 != fread(bmp_header_p, sizeof(char), 14, filename)) { 
       perror("message"); 
       return FALSE; 
     } else { 
       return TRUE; 
     } 
} 

回答

3
struct _bmpfile { 
    bmp_header_t header; 
    bmp_dib_v3_header_t dib; 

    rgb_pixel_t **pixels; 
    rgb_pixel_t *colors; 
}; 

这个 “标题” 不是指针。

bmp_header_t *bmp_header_p; 

这一个是。编译器在抱怨你,因为你试图为指针分配一个非指针的东西。这些类型是不同的。

看你的代码,你实际上并不需要或想要这种分配的一切,你甚至不需要malloc的,假设你的BMP对象已经由主叫方分配:

bool 
bmp_get_header_from_file(FILE *filename, bmpfile_t *bmp) 
{ 
     fseek(filename, 0L, SEEK_SET); 

     if(sizeof(bmp_header_t) != fread(&bmp->header, sizeof(bmp_header_t), sizeof(char), filename)) { 
       perror("message"); 
       return FALSE; 
     } else { 
       return TRUE; 
     } 
} 
+0

的确。如果它不是一个真正的指针,那就加上'&'来获取变量的地址。 – Jite

+0

调用者分配它的语法是什么? –

+0

struct _bmpfile bf; (这将在堆栈上构建一个,如果你在main()或者你可以控制变量的生命周期的地方(也就是说,当这个函数完成时变量是垃圾),或者你应该这样做:struct _bmpfile * bf =(_bmpfile *)malloc(sizeof(_bmpfile)); 如果您执行自动版本(没有malloc),您将调用您的get_header例程,如下所示:success = bmp_get_header_from_file(file,&bf);否则你会这样做(bmp_get_header_from_file(file,bf);因为bf将是一个指针 – crowder

相关问题