2011-09-22 84 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

相关问题