好的,所以我有一个项目,我有一些帮助函数,需要在各种其他文件中共享。将其命名为Helper.c /.h,并使用相应的编译标志以避免多次包含(#ifndef SymbolName #define Symbolname blah blahblah #endif)。每个文件都有以下列方式的头文件:
#include ....
#include ....
#ifndef __FILENAME_H__
#define __FILENAME_H__ //in each file(FILENAME is replaced for the current file's name)
declarations of functions, types, etc.
#endif
我有一个比较函数,叫做dummyCompare(模板,所以在创建这个ADT的变量时,你需要提供自己的函数指针才能工作,所以在某些情况下我不需要特定的函数,只需一般的,所以这就是dummyCompare。 编译时得到的错误是:
gcc ./Helper.c ./LinkedList.c ./ABB.c ./AVL.c -Wall -lm -D DEBUG -g
duplicate symbol _dummyCompare in:
/var/folders/f2/nghjrbz915vbhjw_1gbb65sm0000gn/T//cc75R4sQ.o
/var/folders/f2/nghjrbz915vbhjw_1gbb65sm0000gn/T//cc8jQwyE.o
ld: 1 duplicate symbol for architecture x86_64
collect2: ld returned 1 exit status
列表用于ABB中的树操作的非递归解决方案(ABB =西班牙语中的BST)/ AVL。现在使用Sublime Text 2,我得到“dummyCompare”
的以下搜索结果Searching 8 files for "dummycompare"
/dir/ABB.c:
81 if (abb != NULL) {
82 if (ABB_getRoot(*abb) != NULL){
83: list = LL_newList(dummyCompare);
84 LL_insert(list, 1, ABB_getRoot(*abb));
85
/dir/AVL.c:
67 if (avl != NULL) {
68 if (AVL_getRoot(*avl) != NULL){
69: list = LL_newList(dummyCompare);
70 LL_insert(list, 1, AVL_getRoot(*avl));
71
/dir/Helper.c:
2
3 /****************************************************************************
4: * dummyCompare *
5 *****************************************************************************
6 * Retorna si 2 dirrecciones son iguales, necesario para el funcionamiento *
7 * de la lista *
8 ****************************************************************************/
9: int dummyCompare(void * a, void * b)
10 {
11 if (a == b)
/dir/Helper.h:
4
5 int getMax(int a, int b);
6: int dummyCompare(void * a, void * b);
7
8 #endif
5 matches across 4 files
事情是我似乎无法理解什么是错的,为什么我得到这个错误。检查了很多其他问题,只有我发现的答案是(“使用#ifndef ...”),我正在使用