LNK2005:“已定义错误

时间:2012-04-13 12:37:32

标签: c++ linker redefinition

我正在尝试使用分离的.cpp文件中的全局变量。我有一个init.h文件:

//init.h
#ifndef init
#define init
int a = 3;
#endif

我有一个init.cpp文件:     //init.cpp #include init.h

最后我的main.cpp文件是:

//main.cpp
#include "init.h"
int main(void)
{
    while(1)
    {
    }
}

在此之后,我收到错误:

1>init.obj : error LNK2005: "int a" (?a@@3HA) already defined in main.obj
1> ..deneme.exe : fatal error LNK1169: one or more multiply defined symbols found

为什么我的#infdef控件无法解决此问题?我也尝试使用#pragma once,但我得到了同样的错误。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:9)

您需要将变量标记为extern,并在实现文件中仅定义一次。

现在代码已经破解了一个定义规则。在这种情况下,包含警卫没有帮助,因为包含该标头的所有翻译单元都重新定义变量。

你真正需要的是什么:

//init.h
#ifndef init
#define init
extern int a;
#endif

和定义:

//init.cpp
#include "init.h"
int a = 3;

此外,在使用全局变量之前三思而后行。你实际上想要实现的是什么?