Mar*_*lor 6 c++ header include linker-errors
我有3个cpp文件,看起来像这样
#include "Variables.h"
void AppMain() {
//Stuff...
}
Run Code Online (Sandbox Code Playgroud)
他们都在里面使用相同的变量,所以他们有相同的标题,但我得到这样的东西
1>OnTimer.obj : error LNK2005: "int slider" (?slider@@3HA) already defined in AppMain.obj
Run Code Online (Sandbox Code Playgroud)
这是为什么?
Jam*_*are 16
请记住,#include类似于剪切和粘贴包含它的源文件中包含的文件(这是一个粗略的类比,但你明白了).这意味着如果你有:
int x; // or "slider" or whatever vars are conflicting
Run Code Online (Sandbox Code Playgroud)
在头文件中,头文件包含在一个程序中的三个源文件中,然后它们都将具有一个将被冲突的全局命名x.
你想要做的是将变量定义为extern,以便.cpp文件都将获得声明,然后在一个.cpp文件中给出实际的定义.
在Variables.h中:
extern int x;
Run Code Online (Sandbox Code Playgroud)
在SomeSourceFile.cpp中
int x;
Run Code Online (Sandbox Code Playgroud)
当然,我建议不要使用全局变量,但如果你必须使用它们,这将使它们不会发生冲突.