В чем может быть причина получения ошибки «множественные определения» при связывании? - PullRequest
0 голосов
/ 25 октября 2009

Я получаю ошибки, что мои функции были определены несколько раз. Конечно, у меня есть только один файл и одна функция с таким именем в моем файле. Где gcc может найти эти другие определения?

Вот пример сообщения об ошибке, но я получаю много таких:

/ TMP / ccerCzAD.o: main.c :( текст + 0xdb).

впервые определено здесь

/ tmp / ccGbaGfJ.o: в функции `at ':

dlist.c :(. Text + 0xe3): множественное определение `at '

Я включил "stdio.h" и "stdlib.h". Может быть, функция "at ()" уже определена в одном из них?

Ответы [ 3 ]

2 голосов
/ 25 октября 2009

Возможно, вы определяете функцию в заголовочном файле, а не объявляете ее.

int at(void); /* declaration */
int at(void) { return 0; } /* definition */

Обычным способом является размещение объявлений в заголовочных файлах и определений в кодовых файлах.

1 голос
/ 25 октября 2009

Функция at определена в файлах dlist.c и main.c

Может ли это быть так?

файл dlist.h

int at();

файл dlist.c

int at(){return 0;}

файл main.c

#include "dlist.h"

int at(){return 1;}
int main()
{
       return at();
}
0 голосов
/ 25 октября 2009

Вы также можете:

#ifndef _DLIST_H
#define _DLIST_H

int at();

#endif

Для предотвращения одной и той же ошибки при использовании #include для включения одного и того же заголовка в несколько файлов .c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...