【发布时间】:2009-11-02 20:41:37
【问题描述】:
在 .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 文件中,当我尝试编译时,我会收到“错误 LNK2005:“int VARX”(?VARX@@3HA) 已在 Dll.obj 中定义”错误。如果我只包含在一个 cpp 文件中,则不会遇到问题。
#IFNDEF....检查是否足以防止这种情况发生?我错过了什么吗?
【问题讨论】:
-
防止这种情况是不够的。当您#include 某些内容时,它与将该文件的全部内容复制到您的文件中相同。当您将其复制到每个 cpp 文件中时,您就是在告诉每个文件包含“int VARX=0;”因为 DEF_VARX 不会在每个文件中第一次定义。因此,它们中的每一个都将包含 VARX 的定义。 #ifndefs 防止 int VARX;虽然在同一个文件中被定义了两次。
标签: c++