C ++ - 多个文件中的全局变量

时间:2013-04-07 09:36:15

标签: c++ global-variables

我在 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++;
}

1 个答案:

答案 0 :(得分:6)

您应该只将extern声明放在一个头文件中。然后,任何其他想要使用a的文件都应包含此头文件。

然后,您应该将定义int a = 0;放在一个实施文件(.cpp文件)中。

目前,您在多个头文件中有多个extern声明,这些好的但只是令人困惑。你应该简单地在一个地方宣布它。但是,您遇到的主要问题是您在a定义 header.h。如果您在多个翻译单元中包含该标题,则您将有多个定义。