3

我有一个头文件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;,并且工作得很好。然后我声明了 2BOOL并在其中使用了它们test2.cpp,但是我得到了一个error LNK2005: "struct tag_KG_Data g_GlobalVar" (?g_GlobalVar@@3Utag_KG_Data@@A) already defined in test1.obj并且对于我拥有的每个全局变量,我都会得到一个类似的错误。问题是我不使用GLOBAL_VAR g_GlobalVarintest2.cpp或任何BOOLs in test1.cpp

4

1 回答 1

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;
于 2012-09-09T11:37:03.843 回答