c++ - 多包含 .h 文件

标签 c++

在 .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/

相关文章:

c++ - boost 变体对常用方法的简单调用

c++ - QObject派生类回调函数到c库

C++ 指针数组

c++ - 有什么方法可以将 "reconst"转换为非 const char 吗?

c++ - 如何产生随机数,使它们的总和等于给定的数字?

c++ - 与 powershell get-physicaldisk 命令等效的 Windows API

c++ - 使用int错误计算float变量

c++ - 切换到具有不同标量分量的图像会导致访问冲突

C++ Borland Builder 表单 - 调用函数

c++ - 从c++中的套接字返回值读取