1

我在header.h中定义了变量 'a'并在test1.cpptest2.cpp中使用它。当我构建它时,我收到了一个链接错误,例如

致命错误 LNK1169:找到一个或多个多重定义的符号

有什么问题?我想使用全局变量'a'可以在多个cpp中使用。

头文件.h

int a = 0;

主文件

#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;
}

测试1.h

extern int a;

void test1();

测试1.cpp

#include "test1.h"
#include "header.h"

void test1() {
    cout << "test1 : " << a << endl;
    a++;
}

测试2.h

extern int a;

void test2();

测试2.cpp

#include "test2.h"
#include "header.h"

void test2() {
    cout << "test2 : " << a << endl;
    a++;
}
4

1 回答 1

6

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

然后你应该把定义int a = 0;放在一个实现文件(一个.cpp文件)中。

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

于 2013-04-07T09:39:08.180 回答