2013-05-26 2 views
1

Я пишу реализацию связанного списка для сетевого проекта, над которым я работаю. Он разделен на два файла: llist.h и llist.c. Я включаю llist.h в несколько файлов проекта, а при компиляции я связываюсь с библиотекой, которую я скомпилировал, которая включает llist.c. К сожалению, я получаю ошибку «множественных определений» для каждого заголовка метода в llist.h. т.е.:C Linker: Несколько определений

../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 

Спасибо!

UPDATE: Хорошо, проблема, кажется, исходит из следующего фрагмента кода в одном из файлов проекта:

OPP_DIRECTION(getDirToXYPOS((XYPOS*)getFromHeadLList(memories[avID], 0), &curPos))) 

Обратите внимание, что getFromHeadLList является метод, который я добавил к llist.h и определены в LLIST. с. Просто комментируя эту часть и добавляя в фиктивный параметр, то есть:

OPP_DIRECTION(getDirToXYPOS(&curPos, &curPos))) 

Он компилируется в порядке.

+1

Это поможет, если вы покажете команды, которые используются для компиляции и компоновки. И убедитесь, что вы не добавляете 'llist.c' в проект IDE (поскольку он скомпилирован как отдельная библиотека). – Inspired

+0

Технически сообщения об ошибках выглядят так, что вы дважды помещаете 'llist.c' в статическую библиотеку, но это не имеет смысла (однако попробуйте перекомпилировать библиотеку с нуля, удалив файл .a). И чтобы убедиться, что у вас нет 'llist.c' в вашем проекте, попробуйте ссылку без командного переключателя' -ldutil'. Если он компилируется, вы каким-то образом включили llist.c в проект. – Inspired

ответ

1

Скорее всего вы скомпилировали свой llist.c в свой проект, а также в статическую библиотеку.

+0

Это было первое, что я проверил, и, к сожалению, это не так. Странно, что я вообще не изменил make-файл за последние 3 дня, и эта проблема только что появилась 20 минут назад, когда я добавил в метод getFromHeadLList (который я определяю в файле c). – A0A

+0

Вы используете какую-то IDE? вы открыли файл .c в среде IDE, чтобы добавить метод? Использует ли ваша среда IDE ваш Makefile? – Inspired

+0

Нет, нет IDE. Сюжет утолщен, однако, я не думаю, что это проблема с файлом h; похоже, это вызов одного из методов в одном из файлов проекта. Я собираюсь обновить OP информацией, спасибо за помощь до сих пор. – A0A