游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5236|回复: 8

[C++]在C++中如何使用全局变量???

[复制链接]

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2006-6-15 10:06:00 | 显示全部楼层 |阅读模式
在一个有着多个文件的工程中,怎么使用“全局变量”???

昨天碰到一个问题,我要在我的工程中使用一个“全局变量”,现在我的工程里有很多文件(比如:d3d9.h d3d9.cpp d3dsound.h d3dsound.cpp .......),在这些文件中都将用到这个变量。

所以我就新建了2个文件:Global.h 和 Global.cpp

其中头文件里用来声明“全局变量”和“全局函数”,主文件里用来实现“全局函数”

可是,我遇到了很多问题:

1  编译通过,在链接的时候出现:“该符号(就是我定义的那个全局变量)已经在 " **.cpp " 里被定义”

2  查看MSDN,将全局变量的声明部分前面加上关键字 static ,编译,链接都没有问题,可是程序运行时“全局变量”的值始终都是“0”

3  再看MSDN,将前面的关键字由 static 改成 extern ,编译通过,链接时错误:“"全局变量",无法解析的符号”

我已经疯了~~~~~~~~~~~~~~~~~~

30

主题

569

帖子

569

积分

高级会员

Rank: 4

积分
569
发表于 2006-6-15 10:21:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

在使用前声明外部连接,比如你声明了变量 int g_i;
那么在引用前加 extern int g_i;
  全局变量的初始化次序是未定义的,尽量不要有初始化依赖性。

30

主题

569

帖子

569

积分

高级会员

Rank: 4

积分
569
发表于 2006-6-15 10:21:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

static 变量无法使用extern

13

主题

153

帖子

153

积分

注册会员

Rank: 2

积分
153
QQ
发表于 2006-6-15 13:23:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

// in Global.h
extern BOOL g_bFlag;

// in Global.cpp
BOOL g_bFlag = FALSE;

// in other cpp files
#include "Global.h"

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2006-6-17 10:58:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

昨天晚上终于把问题解决了。
方法和“logos”兄弟说的一样,这是MSDN上的标准解决方法之一,都怪当时没仔细看MSDN,感谢回帖的所有朋友。
此问题正式结帖。

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-6-17 13:20:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

没想到MSDN上连这都有,还真没注意过

31

主题

259

帖子

1756

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1756
QQ
发表于 2006-6-21 11:45:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

我的程序也用了很多全局变量...
主要的几个类都用了全局指针...
互相调用方便些...

11

主题

53

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2006-6-21 13:56:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

不是吧~~MSND上说这个了?我找了半天也没看到~~
我用的MSND Studio .NET 2003 版  大家一般都用哪一版本的呢?

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2006-6-22 11:39:00 | 显示全部楼层

Re:[C++]在C++中如何使用全局变量???

我用的也是VC.NET 2003啊
我当时是碰到了:
“该符号(就是我定义的那个全局变量)已经在 " **.cpp " 里被定义”
这个错误以后,就在IDE下面的输出窗口中,把这个错误选中,顺手一按F1,就在MSDN中找到了“LNK 20**”这个页面,里面详细介绍了造成这种错误的原因和可能的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 19:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表