У меня есть один файл a.h, где я объявлял так много структур. Я инициализирую эти структуры в файле a.c (я включил файл a.h), и я хочу повторно использовать тот же файл a.h в другом файле b.c. Когда я включил заголовочный файл a.h в b.c, я получаю ошибку как множественное определение. Пожалуйста, помогите мне, что можно сделать для предотвращения этой проблемы и повторного использования того же файла .h в обоих файлах .c.Ошибка множественного определения в файле .o
ответ
http://en.wikipedia.org/wiki/Include_guard
Вам нужно не включить его в два раза, то есть, оберните .h файл в эквиваленте
#ifndef _MY_H_
#define _MY_H_
/* codez go here */
#endif _MY_H_
Вы никогда не должны создавать объект вещи в заголовочных файлах, т.е. никогда ничего не определить, только объявите их.
Вы должны поставить единое определение каждой объявленной вещи в одном файлов 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);
a.h
должен объявить только структуры — не переменные. Или, если он объявляет переменные, они должны быть объявлены extern
для предотвращения дублирования определений. (Затем определите их один раз в одном из файлов .c).
Ошибка вызвана несколькими определениями одной и той же переменной. Убедитесь, что a.c
и b.c
не объявляют одинаковые имена переменных.
Ваш заголовочный файл должен быть объявлен как это ..
#ifndef MYHEADER_H
#define MYHEADER_H
struct MyStruct {
...
...
};
#endif // MYHEADER_H
Таким образом, даже если включить этот файл в любом количестве .c файлов, структуры в нем будут определены только один раз.
- 1. множественного определения в файле заголовка
- 2. Странная ошибка множественного определения
- 3. Ошибка множественного определения
- 4. Ошибка множественного повторного определения
- 5. Ошибка множественного определения ld
- 6. ошибка множественного определения C++
- 7. Ошибка «множественного определения _start» при использовании -Wall вместо -o
- 8. Ошибка множественного определения C Netbeans
- 9. Почему при связывании возникает ошибка множественного определения?
- 10. Ошибка в файле makefile .o
- 11. Ошибка множественного определения в компиляторе C++
- 12. Странный сценарий получения g ++ ошибка множественного определения функций
- 13. ошибка определения множественного определения в fortran (ifort - gfortran)
- 14. gSOAP ошибка определения множественного определения в eclipse cdt
- 15. Ошибки множественного определения (LNK2005)
- 16. векторные ошибки определения множественного определения
- 17. Проблема множественного определения в NetBeans
- 18. Как избежать множественного определения PANTHEIOS_FE_PROCESS_IDENTITY?
- 19. Static Lib Ошибка множественного определения связи
- 20. C ошибка связывания для множественного определения
- 21. Ошибка множественного определения CUDA при связывании
- 22. ошибка множественного определения при связывании проекта C++
- 23. шаблонный класс множественного определения
- 24. Проблема с файлом заголовка: ошибка множественного определения; сначала определяется здесь
- 25. Ошибка множественного определения, вызванная компоновщиком Atmel Studio 6
- 26. Что с этими ошибками g ++ «множественного определения»?
- 27. C++ множественного определения переменной даже экстерном
- 28. НКУ - ошибка множественного определения при определении шаблона (VC++ отлично)
- 29. Ошибка множественного определения при компиляции с использованием заголовков
- 30. ошибка множественного определения при связывании объектного файла и статической библиотеки