c++全局变量

c++ global variables

本文关键字:全局变量 c++      更新时间:2023-10-16

我有一个头文件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

起初,我用extern GLOBAL_VAR g_GlobalVar;在文件test1.cpp中只声明了GLOBAL_VAR g_GlobalVar,并且工作得很好。然后我声明了2个BOOLs,并在test2.cpp中使用它们,但我得到了一个error LNK2005: "struct tag_KG_Data g_GlobalVar" (?g_GlobalVar@@3Utag_KG_Data@@A) already defined in test1.obj,对于我拥有的每个全局变量,我都会得到类似的错误。问题是,我在test2.cpp中没有使用GLOBAL_VAR g_GlobalVar,也没有在test1.cpp中使用任何BOOL

这是因为在标头中定义全局变量,而您应该只声明它们。

在全局定义前面添加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;