我有 3 个这样的 cpp 文件
#include "Variables.h"
void AppMain() {
//Stuff...
}
它们都在内部使用相同的变量,因此它们具有相同的 header ,但我得到的是这样的
1>OnTimer.obj : error LNK2005: "int slider" (?slider@@3HA) already defined in AppMain.obj
这是为什么?
最佳答案
请记住,#include 大致类似于将包含文件剪切并粘贴到包含它的源文件中(这是一个粗略的类比,但您明白了)。这意味着如果您有:
int x; // or "slider" or whatever vars are conflicting
在头文件中,并且该头文件被程序中的三个源文件包含,那么它们都将定义一个名为 x 的全局变量,这将发生冲突。
您要做的是将变量定义为 extern,以便 .cpp 文件都得到声明,然后在您的一个 .cpp 文件中给出实际定义。
在 Variables.h 中:
extern int x;
在 SomeSourceFile.cpp 中
int x;
当然,我建议不要使用全局变量,但如果您必须使用它们,这将避免它们发生冲突。
关于c++ - 如何避免头文件中定义的变量出现 LNK2005 链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574499/