LNK2005:\”已定义的错误(LNK2005: \" already defined error

2019-09-16 13:09发布

我试图用一个全局变量分开.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但我得到了同样的错误。 什么是错我的代码?

Answer 1:

您需要将您的变量标记为extern ,并在实现文件只有一次定义它。

由于代码现在,你打破了一个定义规则 。 在包括警卫并不在这种情况下帮助,因为所有翻译的单位,包括头重新定义变量。

你真正需要:

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

和定义:

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

此外, 使用全局变量之前三思而后行 。 它是什么,你实际上是想达到什么目的?



文章来源: LNK2005: \" already defined error