Включить охрану здесь не поможет. Они не позволят одному блоку компиляции получить две копии данных, если он дважды включает заголовочный файл, но у вас есть два полностью отдельных блока компиляции. Компилятор поместит recControlListPtr
в обоих объектных файлов.
Затем, когда вы связываете эти объектные файлы вместе, компоновщик будет жаловаться, потому что есть два экземпляра этого символа.
Что вам нужно сделать, это убедиться, что существует только один экземпляр. В заголовочном файле замените:
recControlList *recControlListPtr;
с:
extern recControlList *recControlListPtr;
Затем в одном ваших C-файлов поместите:
recControlList *recControlListPtr;
Итог: старайтесь не определять что-либо в заголовочных файлах. Объявлять вещи (заявляя , что они существуют, такие как прототипы, внешние, typedefs, структуры и т. Д.) - все в порядке, определение (выделение пространства для переменных, предоставление тел функций и т. Д.), Как правило, не *. 1024 *