在 .h 文件中,我将全局变量声明为:
#pragma data_seg(".shared")
#ifndef DEF_VARX
#define DEF_VARX
int VARX=0;
#endif /*DEF_VARX*/
#pragma data_seg()
#pragma comment(linker, "/SECTION:.shared,RWS")
但是,如果我将此文件包含在多个 cpp 文件中,当我尝试编译时,我会收到“error LNK2005: "int VARX"(?VARX@@3HA) already defined in Dll.obj"错误。如果我只包含一个 cpp 文件,则不会遇到任何问题。
难道#IFNDEF....检查不足以防止这种情况发生吗?我错过了什么吗?
最佳答案
这种行为的原因是,你编译了这一行
int VARX=0;
进入每个 .obj 文件。这对编译没问题,但在链接时符号变成多重定义,这是非法的。使用
extern int VARX;
在头文件中,以及
int VARX=0;
在一个(而且只有一个)源文件中解决了这个问题。
关于c++ - 多包含 .h 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663562/