C++Builder 全局变量

今天遇到了一个C++Builder 全局变量的问题,经过查找资料,终于解决了

 

A.CPP

#include <B.H>

ShowMessage(MainVersion);

 

 

B.H

 

AnsiString MainVersion;

 

C.CPP

#include <B.H>

MainVersion=”T-bag”;

 

这样三个文件,C.CPP 修改了 MainVersion 的值后,A.cpp显示为空,奇怪哈。

 

Google 得到:全局变量需要加:extern 关键字

于是修改为:extern AnsiString MainVersion

问题依然如故

再Google ,原来VCL 对 extern 关键字做了扩展,改为

extern PACKAGE   AnsiString MainVersion;

编译失败,

在B.CPP 中加入

AnsiString MainVersion;

问题全部解决。

 

奇怪哈,以前声明全局变量只放在.H 文件中,用extern PACKAGE   关键字还需要在.CPP中写一份,不知道其中的原因,如果哪位看官明白,请告诉小弟。

 

发表于 2007-05-17 13:59

评论

# 回复: C++Builder 全局变量 2007-05-17 15:51:00 王中王

呵呵。和CBUILDER没关系,和C++没关系。所谓的C++BUILDER扩展了extern更子虚乌有啊。
说到底是C没学明白。
把变更声明和定义搞混了。原来用得没问题,是因为头文件被引用得少。
在头文件里定义变量,这个头文件被多处引用,相当于定义了多个变量,链接时应该有警告的。
改了一个变量,另一个变量没变,是正常的。正确的做法是,如果单元将被多处使用,应该在CPP 中定义变量,在头文件中声明(extern关键字),在头文件中声明的目的是让其它单元知道这个变量在哪,而不是重新定义一个。

发表评论

标题:  
署名:  
链接:
内容:
验证码: