ошибка: ожидаемый список спецификаторов-спецификаторов перед «файлом» - PullRequest
0 голосов
/ 23 сентября 2011

Я написал этот заголовочный файл для другой основной программы.Этот файл объявляет структуру 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'

1 Ответ

1 голос
/ 23 сентября 2011

File не определено.Правильный тип, который вы ищете: FILE.

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

Остальные ваши ошибки, как представляется, являются результатом этой ошибки, поэтому это должно быть вашим единственным исправлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...