MRM*_*MRM 3 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
Run Code Online (Sandbox Code Playgroud)
起初,我只申报GLOBAL_VAR g_GlobalVar文件test1.cpp与extern 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和每个全局变量我得到一个类似的错误.问题是我不使用GLOBAL_VAR g_GlobalVarin test2.cpp或任何BOOLs in test1.cpp.
这是因为您在标题中定义了全局变量,而您应该只声明它们.
添加extern到全局定义前面,并在单个cpp文件中创建定义.
在标题中:
// Declarations
extern GLOBAL_VAR g_GlobalVar;
extern BOOL b_newDataReady;
extern BOOL b_startedSocketClient;
Run Code Online (Sandbox Code Playgroud)
在cpp文件中:
// Definitions
GLOBAL_VAR g_GlobalVar;
BOOL b_newDataReady;
BOOL b_startedSocketClient;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |