2015-04-29 3 views
3

Моего файл с заголовком имеет следующее сообщение об ошибке в XcodeC - ошибка переопределения в Xcode

Redefinition of 'entry' 

Но она прекрасно работает, когда я компилирую его с помощью gcc в командной строке. Может ли кто-нибудь из вас дать объяснение, почему?

Это snapshot.h:

#ifndef SNAPSHOT_H 
#define SNAPSHOT_H 

#define MAX_KEY_LENGTH 16 
#define MAX_LINE_LENGTH 1024 

typedef struct value value; 
typedef struct entry entry; 
typedef struct snapshot snapshot; 

struct value { 
    value* prev; 
    value* next; 
    int value; 
}; 

// the line below is where the redefinition error appears 
struct entry { 
    entry* prev; 
    entry* next; 
    value* values; 
    char key[MAX_KEY_LENGTH]; 
}; 

struct snapshot { 
    snapshot* prev; 
    snapshot* next; 
    entry* entries; 
    int id; 
}; 

#endif 

Это snapshot.c:

#include <stdio.h> 
#include <stdlib.h> 
#include <strings.h> 
#include "snapshot.h" 

int 
main(int argc, char *argv[]){ 
    int x = 7; 
    printf("x= %d\n" , x); 
    printf("value = %d\n", 1); 
    return 0; 
} 
+0

Является ли это * полным * Ошибка? Измените свой вопрос, включив в него результат соревнующихся и неотредактированных ошибок. –

+0

Да. Это была полная ошибка. @ Ответ Бенджи хорошо решил. Спасибо за комментарий Павла. – hexinpeter

ответ

6

entry первоначально был зарезервирован в качестве ключевого слова, а потом объявлены устаревшими. Поэтому старшие компиляторы не допускают этого (см. this question). Измените имя структуры, и все должно быть хорошо.

+0

Альтернативно компилирование, например. '-std = c99' может это исправить. –

Смежные вопросы