怎样定义全局变量、枚举类比较合理?
我想在许多窗体中都使用相同的全局枚举变量,现在是在每个窗体.cpp文件开头加入枚举类型说明和枚举变量说明,试着在主程序.h文件加入,总提示出错。
大家说说怎样定义全局变量、全局枚举类比较合理?
问题点数:20、回复次数:13Top
1 楼TopCat(令狐虫)回复于 2003-04-01 11:54:20 得分 10
你一定是犯了“多重定义”的毛病。
一般做法是这样:在cpp里定义变量,而在.h里只声明它(使用extern关键字),这样就没有问题了。
可以参考BCB自动生成的文件中,Form 的定义。Top
2 楼myredsun(迷茫)回复于 2003-04-01 12:02:24 得分 10
同意楼上的,一般如果是全局性的定义,我会增加一个globe.cpp和globe.h文件,在CPP文件里定义,而在H文件里声明,再在要用的地方包含globe.h文件即可。Top
3 楼sinman(普善客)回复于 2003-04-01 12:09:15 得分 0
而且要扩展externTop
4 楼oishi(农夫XP)回复于 2003-04-01 12:20:36 得分 0
同意楼上!Top
5 楼lingyunfeipu(凌云)回复于 2003-04-01 13:36:52 得分 0
在 public.cpp 中
int x;
在public.h中
extern int x;
在from 中
#include "public.h"
就可以直接用x变量了
Top
6 楼leonpard(猪哥哥)回复于 2003-04-01 13:47:59 得分 0
我写了这么多年程序,几乎不用extern这个关键字,最好不要使用全局变量这种东西,破坏了程序的结构,你可以声明一个公用的类实例,所有的变量都放在这个类里面,集中管理。功能上是一样的,但是优雅了很多。Top
7 楼TryToday(超口术生命体)回复于 2003-04-01 16:09:10 得分 0
全局类实例?具体怎么用呢?Top
8 楼TryToday(超口术生命体)回复于 2003-04-01 16:09:36 得分 0
我在主窗口定义了枚举类型:
enum nowFormStatus {_IN=0, _OUT=1, _TO=2, _OTHER=3};
在其它窗口使用这个枚举类型的时候,都要在.cpp文件开头重新定义,加 extern 会提示出错。(和变量不一样)
这种方法太不爽了,如果要改动就得改所有窗体。谁有好主意来方便其它窗口使用这个枚举类型?Top
9 楼anetfish(鱼翔浅底)回复于 2003-04-06 20:59:34 得分 0
gz
Top
10 楼TopCat(令狐虫)回复于 2003-04-11 13:22:21 得分 0
enum只是一个类型,你可以将它定义在头文件里,在需要用到的地方包含一下,我想不出会有什么样的问题?
我做了一个小Demo,给你看看吧:
//File1.h
#ifndef FILE1_H
#define FILE1_H
enum TestEnum {RED, GREEN, BLUE};
#endif
//Form1
#include "File1.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TestEnum e = RED;
}
//---------------------------------------------------------------------------
//Form2
#include "File1.h"
void __fastcall TForm2::Button1Click(TObject *Sender)
{
TestEnum e = GREEN;
}
//---------------------------------------------------------------------------
编译链接都不会出错。
上面说的extern,是针对变量的。Top
11 楼TryToday(超口术生命体)回复于 2003-04-14 12:11:04 得分 0
try...Top
12 楼TryToday(超口术生命体)回复于 2003-04-16 18:50:10 得分 0
那样还是相当于在每个窗口都定义一次啊。Top
13 楼TopCat(令狐虫)回复于 2003-04-16 19:52:23 得分 0
类型哪里来的“定义”??
除了这种方法,你还有什么更好的方法?Top




