c ++全局变量

时间:2012-09-09 11:34:38

标签: c++ windows linker global-variables

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

1 个答案:

答案 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;