わかりましたので、プロジェクトがあり、他のさまざまなファイルで共有する必要があるヘルパー関数がいくつかあります。これを 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 の変数を作成するときは、それが機能するように独自の関数ポインターを指定する必要があります。コンパイル時に発生するエラーは次のとおりです。
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
List は、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
何が間違っているのか、なぜこのエラーが発生するのか理解できないようです。他の多くの質問をチェックしましたが、私が見つけた唯一の答えは、私が使用している ("use #ifndef ...") でした