2013-06-28 61 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

相關問題