2017-01-14 3 views
-2

Ниже приведен код моего заголовочного файла trie.h. Компилятор продолжают показывать следующее сообщение об ошибке:Переопределение структуры

In file included from speller.c:11: 
./trie.h:3:8: error: redefinition of 'letter' 
struct letter 
    ^
./trie.h:3:8: note: previous definition is here 
struct letter 
    ^
1 error generated. 
make: *** [speller.o] Error 1 

Код:

struct letter 
{ 
    int is_word; 
    struct letter* arr[27]; 
}; 


// fuctions 
struct letter* create_trie(); 
void free_trie(struct letter* trie); 
+2

Включает ли ваш заголовок охранники? – DeiDei

ответ

2

Скорее всего, ваш файл будет включены несколько раз, отсюда и ошибка переопределения. Чтобы избежать этой проблемы использования include guards:

#ifndef HEADERNAME_DEFINED 
#define HEADERNAME_DEFINED 

// your code goes here. 

#endif // HEADERNAME_DEFINED 

или вы можете использовать нестандартные директивы препроцессора, как #pragma once, чтобы сделать работу. Это приводит к меньшему количеству кода, а иногда и более быстрой скорости компиляции.
Put, что на верхней части файла:

#pragma once 

// your code goes here 

Примечание:Комментарий (// HEADERNAME_DEFINED часть) после того, как #endif не нужно. Это просто подсказка, чтобы программист знал, что принадлежит вместе.

+0

Спасибо. Множественное включение было моей проблемой. – marpangal

+0

@ArpanMangal рад, что он решил вашу проблему. Если это так, вы можете пометить ответ как принятый. – Quest

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