小问题:公共变量的使用
我定义了几个AnsiString 变量在strmsg.h文件中,以便作为公共变量供其它文件使用,如下:
AnsiString Str_Application; //程序标题
在工程中,我添加了这个strmsg.h,工程文件中增加了一行USE**之类的语句。我又在工程文件中自定义了一个LoadRes函数,从资源DLL中读取赋给Str_Application值,没用extern就编译通过了。
在Form文件中,我在文件开头加上了extern AnsiString Str_Application,在Create事件中赋值:
Caption=Str_Application;
编译通过,运行后窗体标题为空,跟踪后发现Str_Application的值已经读取正常,并非为空。增加了一个MessageBox显示它的值也是空,中断查看却有值,真不知是什么回事,不会是BCB的Bug吧?
问题点数:20、回复次数:5Top
1 楼ThinkX(秋天的树)回复于 2004-10-04 14:06:39 得分 4
变量分为声明和定义。
声明是告诉编译器我要使用一个变量;
定义是告诉编译器要为变量分配存储空间。
你在头文件中写入:
AnsiString Str_Application;
其实不是声明变量,而是定义变量,这就意味着包含这个头文件的地方都会为变量分配空间,所以会有很多值。
正确的方法是在头文件中使用extern进行声明,而在cpp中定义一次。
还有一个方法就是在头文件中使用static 定义。Top
2 楼blow_jj(阿俊)回复于 2004-10-04 14:30:05 得分 2
"我添加了这个strmsg.h"--在头文件中是声明,只分配了空间
呵呵Top
3 楼Maconel(Maconel)回复于 2004-10-04 17:21:49 得分 10
使用全局变量应该这样
添加2个文件:global.h和global.cpp
在global.cpp中这样写:
#include "global.h"
//--------------------
int a;
bool b;
long c;
AnsiString d;
在global.cpp中这样写:
extern int a;
extern bool b;
extern long c;
extern AnsiString d;
在需要使用变量的地方,包含global.h就行了,还要注意自己给global.h文件加些预编译,可以直接新建unit,会自动生成的。
这里有一个使用全局变量的例子:
http://zydlm.wxhc.com.cn/down_view.asp?id=132Top
4 楼Maconel(Maconel)回复于 2004-10-04 17:23:26 得分 0
抱歉,出了点笔误:
在global.cpp中这样写:
extern int a;
extern bool b;
extern long c;
extern AnsiString d;
应该是:
在global.h中这样写:
extern int a;
extern bool b;
extern long c;
extern AnsiString d;Top
5 楼hy1080(老神经病)回复于 2004-10-04 21:43:02 得分 4
变量定义在.c中,在.h中externTop




