LNK2005:"已定义错误

vol*_*zer 3 c++ linker redefinition

我试图从分离的.cpp文件中使用全局变量.我有一个init.h文件:

//init.h
#ifndef init
#define init
int a = 3;
#endif
Run Code Online (Sandbox Code Playgroud)

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

最后我的main.cpp文件是:

//main.cpp
#include "init.h"
int main(void)
{
    while(1)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

在此之后,我收到错误:

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
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*ore 9

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

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

你真正需要的是什么:

//init.h
#ifndef init
#define init
extern int a;
#endif
Run Code Online (Sandbox Code Playgroud)

和定义:

//init.cpp
#include "init.h"
int a = 3;
Run Code Online (Sandbox Code Playgroud)

另外,在使用全局变量之前请三思.你实际上想要实现的是什么?