我有一个头文件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
。
答案 0 :(得分:8)
这是因为你在标题中定义了全局变量,而你应该只是声明它们。
在全局定义前添加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;