以下是我的头文件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);
答案 0 :(得分:2)
很可能您的文件被多次包含,因此重新定义错误。 要避免此问题,请使用include guards:
#ifndef HEADERNAME_DEFINED
#define HEADERNAME_DEFINED
// your code goes here.
#endif // HEADERNAME_DEFINED
或者你可以使用像#pragma once
这样的非标准预处理程序指令来完成这项工作。它导致代码更少,有时编译速度更快
把它放在你的文件之上:
#pragma once
// your code goes here
注意: // HEADERNAME_DEFINED
之后的评论(#endif
部分)不是必需的。这只是程序员知道什么属于一起的暗示。