2011-09-22 83 views
0

我爲另一個主程序編寫了此頭文件。這個文件聲明瞭主函數(別的地方)使用的struct_buffer結構。錯誤:「文件」之前的預期說明符 - 限定符列表

我想要做的是,當有人用buffer_init函數初始化緩衝區時,返回指向緩衝區的指針。緩衝區將包含一個指針數組,當前緩衝區中指針的數量(大小)以及文件指針指向存儲在緩衝區中的指針將被轉儲的文件。

主程序將調用add_to_buffer()函數來添加指向緩衝區的指針。這又會調用buffer_dump()函數來轉儲由buffer-> fp指定的文件中的指針。最後,我將調用buffer_close()來關閉文件。但編譯它會給我幾個我無法理解和擺脫的錯誤。

以下是C語言中的頭文件代碼,我試圖編譯它,它給了我一些我無法理解的錯誤。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define MAX_PTRS 1000 

struct struct_buffer 
{ 
    int size; 
    File *fp; 
    unsigned long long ptrs[MAX_PTRS]; 
}; 

//The struct_buffer contains the size which is the number of pointers in ptrs, fp is the file pointer to the file that buffer will write 
struct struct_buffer* 
buffer_init(char *name) 
{ 
    struct struct_buffer *buf = malloc(sizeof(struct struct_buffer)); 
    buf->size = 0; 
    buf->fp = fopen(name,"w"); 
    return buf; 
} 

//This function dumps the ptrs to the file. 
void 
buffer_dump (struct struct_buffer *buf) 
{ 
    int ctr=0; 
    for(ctr=0; ctr < buf->size ; ctr++) 
    { 
    fprintf(buf->fp, "%llx\n",buf->ptrs[ctr]); 
    } 
} 

//this function adds a pointer to the buffer 
void 
add_to_buffer (struct struct_buffer *buf, void *ptr) 
{ 
if(buf->size >= MAX_PTRS) 
{ 
    buffer_dump(buf); 
    buf->size=0; 
} 
buf->ptrs[(buf->size)++] = (unsigned long long)ptr; 
} 

//this functions closes the file pointer 
void 
buffer_close (struct struct_buffer *buf) 
{ 
fclose(buf->fp); 
}       

上面的編譯代碼給了我下面的錯誤。我無法理解這個問題。請向我解釋麻煩是什麼。

buffer.h:10: error: expected specifier-qualifier-list before 'File' 
buffer.h: In function 'buffer_init': 
buffer.h:19: error: 'struct struct_buffer' has no member named 'fp' 
buffer.h: In function 'buffer_dump': 
buffer.h:29: error: 'struct struct_buffer' has no member named 'fp' 
buffer.h:29: error: 'struct struct_buffer' has no member named 'ptrs' 
buffer.h: In function 'add_to_buffer': 
buffer.h:40: error: 'struct struct_buffer' has no member named 'ptrs' 
buffer.h: In function 'buffer_close': 
buffer.h:46: error: 'struct struct_buffer' has no member named 'fp' 
+0

您的頭文件不應包含函數定義 - 雙重非全局(非靜態)定義。只有一個文件可以在任何給定的程序中使用該頭文件,否則您會得到多重定義的函數。您在頭文件中聲明函數;你可以在一個單獨的源文件中定義它們。 (如果你使用C99和內聯函數,那麼你可以在頭文件中定義函數,但是這樣做時可以使用關鍵字'inline',也可能'static')。 –

回答

1

File未定義。您正在尋找的正確類型是FILE

struct struct_buffer 
{ 
    int size; 
    FILE *fp; // <--------- 
    unsigned long long ptrs[MAX_PTRS]; 
}; 

其餘的錯誤似乎是這個錯誤的產物,所以這應該是你唯一的修復。

+0

感謝Marlon。現在這也是尷尬。 :( – Ankit

+0

我做到了這一點,我是一個C新手,所以如果我問sthg真的很簡單和愚蠢,請不要minf當我調用我的buffer_close()函數時,程序崩潰了,我檢查它並發現它甚至崩潰當buf-> fp不是NULL時,你可以幫我解決這個問題,這裏有什麼可能是錯誤的(語法或其他),謝謝。 – Ankit

相關問題