我正在尝试使用分离的.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
,但我得到了同样的错误。我的代码出了什么问题?
答案 0 :(得分:9)
您需要将变量标记为extern
,并在实现文件中仅定义一次。
现在代码已经破解了一个定义规则。在这种情况下,包含警卫没有帮助,因为包含该标头的所有翻译单元都重新定义变量。
你真正需要的是什么:
//init.h
#ifndef init
#define init
extern int a;
#endif
和定义:
//init.cpp
#include "init.h"
int a = 3;
此外,在使用全局变量之前三思而后行。你实际上想要实现的是什么?