у меня есть заголовочный файл global.h
где я объявляю несколько переменных, которые я намерен использовать в других файлах.
#ifndef GLOBAL_H_
#define GLOBAL_H_
#include <stdio.h>
typedef struct tag_KG_Data
{
int nKGStationID;
int nKGComPort;
}GLOBAL_VAR;
GLOBAL_VAR g_GlobalVar;
BOOL b_newDataReady;
BOOL b_startedSocketClient;#endif
Сначала я объявил только GLOBAL_VAR g_GlobalVar
в файле test1.cpp
с extern GLOBAL_VAR g_GlobalVar;
и работал просто отлично. Тогда я объявил 2 BOOL
и использовал их в test2.cpp
но я получаю error LNK2005: "struct tag_KG_Data g_GlobalVar" (?g_GlobalVar@@3Utag_KG_Data@@A) already defined in test1.obj
и для каждой глобальной переменной я получаю похожую ошибку. Дело в том, что я не использую GLOBAL_VAR g_GlobalVar
в test2.cpp
или любой из BOOL
в test1.cpp
,
Это потому что ты определяющий глобалы в шапке, а ты должен быть только декларирование их.
добавлять extern
перед вашими глобальными определениями и создайте определение в одном файле cpp.
В шапке:
// Declarations
extern GLOBAL_VAR g_GlobalVar;
extern BOOL b_newDataReady;
extern BOOL b_startedSocketClient;
В файле cpp:
// Definitions
GLOBAL_VAR g_GlobalVar;
BOOL b_newDataReady;
BOOL b_startedSocketClient;
Других решений пока нет …