私が取り組んでいるネットワーク プロジェクトのリンク リストの実装を書いています。これは、llist.h と llist.c の 2 つのファイルに分割されています。いくつかのプロジェクト ファイルに llist.h を含め、コンパイル時に、llist.c を含むコンパイルしたライブラリにリンクします。残念ながら、llist.h のすべてのメソッド ヘッダーで「複数の定義」エラーが発生します。すなわち:
../util//libdutil.a(llist.o): In function `LListContains':
llist.c:(.text+0x0): multiple definition of `LListContains'
../util//libdutil.a(llist.o):llist.c:(.text+0x0): first defined here
なぜこのエラーが発生するのかよくわかりません。以前は問題ありませんでしたが、メソッドをもう 1 つ追加してから、この問題が発生し始めました。h ファイル全体は次のとおりです。
#ifndef _LLIST_H_
#define _LLIST_H_
typedef struct _LinkedList
{
int length;
void* data;
struct _LinkedList* head;
struct _LinkedList* tail;
}* LinkedList;
LinkedList LListContains(LinkedList list, void* data, int (*cmp)(const void *, const void *));
void* getDataLList(LinkedList list);
LinkedList createLList(void* data);
void* getFromHeadLList(LinkedList list, int pos);
void* popHeadLList(LinkedList list);
void* popTailLList(LinkedList list);
LinkedList getNextLList(LinkedList current);
LinkedList getPrevLList(LinkedList current);
void addHeadLList(LinkedList list, void* data);
void addTailLList(LinkedList list, void* data);
void FreeLList(LinkedList list);
#endif
ありがとう!
更新:問題は、プロジェクト ファイルの 1 つにある次のコード スニペットにあるようです。
OPP_DIRECTION(getDirToXYPOS((XYPOS*)getFromHeadLList(memories[avID], 0), &curPos)))
getFromHeadLList は、llist.h に追加し、llist.c で定義したメソッドです。その部分をコメントアウトして、ダミーパラメータを追加するだけです。
OPP_DIRECTION(getDirToXYPOS(&curPos, &curPos)))
それはうまくコンパイルされます。