2012-04-18 4 views
0

У меня есть один файл a.h, где я объявлял так много структур. Я инициализирую эти структуры в файле a.c (я включил файл a.h), и я хочу повторно использовать тот же файл a.h в другом файле b.c. Когда я включил заголовочный файл a.h в b.c, я получаю ошибку как множественное определение. Пожалуйста, помогите мне, что можно сделать для предотвращения этой проблемы и повторного использования того же файла .h в обоих файлах .c.Ошибка множественного определения в файле .o

ответ

4

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

Вы должны поставить единое определение каждой объявленной вещи в одном файлов C, и имеют extern деклараций в общем заголовке:

In mydata.h:

struct Foo { 
    float baryness; 
    float baziness; 
}; 

extern struct Foo TheFoo; 

В один C:

#include "mydata.h" 

struct Foo TheFoo; 

В других странах Заголовки в проекте:

#include "mydata.h" 

printf("the baziness is %f right now\n", TheFoo.baziness); 
3

a.h должен объявить только структуры — не переменные. Или, если он объявляет переменные, они должны быть объявлены extern для предотвращения дублирования определений. (Затем определите их один раз в одном из файлов .c).

Ошибка вызвана несколькими определениями одной и той же переменной. Убедитесь, что a.c и b.c не объявляют одинаковые имена переменных.

0

Ваш заголовочный файл должен быть объявлен как это ..

#ifndef MYHEADER_H 
#define MYHEADER_H 

struct MyStruct { 

    ... 
    ... 

}; 

#endif // MYHEADER_H 

Таким образом, даже если включить этот файл в любом количестве .c файлов, структуры в нем будут определены только один раз.

Смежные вопросы