我正在为我正在从事的网络项目编写链表实现。它分为两个文件:llist.h 和 llist.c。我在几个项目文件中包含 llist.h,并且在编译时我链接到我编译的包含 llist.c 的库。不幸的是,对于 llist.h 中的每个方法标头,我都会收到“多重定义”错误。IE:
../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
我不太确定为什么会收到此错误。它曾经很好,但是自从我添加了另一种方法后,这种情况就开始发生了。这是整个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
谢谢!
更新:好的,问题似乎来自项目文件之一中的以下代码片段:
OPP_DIRECTION(getDirToXYPOS((XYPOS*)getFromHeadLList(memories[avID], 0), &curPos)))
请注意,getFromHeadLList 是我添加到 llist.h 并在 llist.c 中定义的方法。通过简单地注释掉该部分并添加一个虚拟参数,即:
OPP_DIRECTION(getDirToXYPOS(&curPos, &curPos)))
它编译得很好。