一个关于全局变量的问题,文件引用link2005,变量重复定义

P_mor 2014-06-24 12:00:20
vs2010项目有4个文件,文件名和代码如下
global.h
#ifndef _GLEBAL_H_
#define _GLEBAL_H_
int a;
#endif

h1.h
#ifndef _H1_H_
#define _H1_H_
extern int test();
#endif

h1.cpp
#include "global.h"
int test(){
return a;
}

main.cpp
#include "h1.h"
#include "global.h"
int main(){
a = 10;
test();
return 0;
}

然后运行的时候就会出现link2005错误:main.obj : error LNK2005: "int a" (?a@@3HA) 已经在 h1.obj 中定义
经过思考,我推断出编译器是一个cpp文件,对应一个模块obj,各模块分开编译,于是h1.obj,和main.obj在编译的时候都把global.h放在一起组成obj,当链接的时候就出现了全局变量重复定义的问题。
于是我给出了一个很“丑”的解决方案,思路是在cpp文件中定义变量,在h文件中声明变量
于是我添加了一个文件global.cpp
int a;

而global.h改为
#ifndef _GLEBAL_H_
#define _GLEBAL_H_
extern int a;
#endif

问题得到了解决。
但是,这样就觉得很不爽,因为明显代码多写了一遍...cpp中定义一次,h中声明一次,请问各路大神有没有更好的解决方案??
...全文
149 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2014-06-24
  • 打赏
  • 举报
回复
不丑啊,都是这么干的,唯一的改进就是不要global.cpp,把a的定义放到main.cpp或者h1.cpp里面。 顺便赞一下楼主的独立思考和解决问题的能力

65,195

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧