c++ - 如何避免头文件中定义的变量出现 LNK2005 链接器错误?

标签 c++ header include linker-errors

我有 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/

相关文章:

c++ - 如何创建一个固定类型的元组,其大小在 C++17 的编译时已知?

c++ - 对于 gtest,如何模拟名称相同但类型不同的方法

python - 使用正则表达式解析 winerror.h 和 ntstatus.h 状态/定义

PHP - 如何检查是否从包含 () 的文件中调用了 return()?

c++ - 如何#include 第三方库

c++ - 无法打开包含文件 : 'stdio.h' - Visual Studio Community 2017 - C++ Error

c++ - 放置新的奇怪行为

css - 页眉背景 - 左边距

python - 如何使用 Python suds 库创建 SOAP 头?

javascript - 在页面中包含 JavaScript 和 CSS (jQuery)