我在 header.h 中定义了变量'a',并在 test1.cpp , test2.cpp 中使用它。 当我构建它时,我得到了像
这样的链接错误致命错误LNK1169:找到一个或多个多重定义的符号
有什么问题? 我想使用全局变量'a'可以在多个cpp中使用。
header.h
int a = 0;
的main.cpp
#include "header.h"
#include "test1.h"
#include "test2.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
test1(); // expected output : 0
test1(); // expected output : 1
test2(); // expected output : 2
test2(); // expected output : 3
cout << "in main : " << a << endl; // expected output : 3
return 0;
}
test1.h
extern int a;
void test1();
test1.cpp
#include "test1.h"
#include "header.h"
void test1() {
cout << "test1 : " << a << endl;
a++;
}
test2.h
extern int a;
void test2();
测试2.cpp
#include "test2.h"
#include "header.h"
void test2() {
cout << "test2 : " << a << endl;
a++;
}
答案 0 :(得分:6)
您应该只将extern
声明放在一个头文件中。然后,任何其他想要使用a
的文件都应包含此头文件。
然后,您应该将定义int a = 0;
放在一个实施文件(.cpp
文件)中。
目前,您在多个头文件中有多个extern
声明,这些好的但只是令人困惑。你应该简单地在一个地方宣布它。但是,您遇到的主要问题是您在a
中定义 header.h
。如果您在多个翻译单元中包含该标题,则您将有多个定义。